From 8e28a70350764fe61358915190ad6f86c6545b2b Mon Sep 17 00:00:00 2001 From: Joe Armani <93854858+JoeArmani@users.noreply.github.com> Date: Thu, 6 Aug 2026 14:36:24 -0400 Subject: [PATCH 1/5] Quest 2 testing suite --- .github/workflows/quest-pr.yml | 175 + .gitignore | 5 + .node-version | 1 + .nvmrc | 1 + README.md | 2 + docs/accessibilityManualTest.md | 139 + package-lock.json | 3301 ++ package.json | 43 + playwright.config.js | 66 + tests/README.md | 61 + tests/config/moduleResolution.js | 19 + tests/corpus/README.md | 48 + tests/corpus/corpusIntegrity.spec.js | 142 + tests/corpus/hostPersonas.json | 162 + tests/corpus/lock.json | 361 + tests/corpus/module4AddressStructure.spec.js | 200 + tests/corpus/responsePipingStructure.spec.js | 283 + tests/corpus/schemas/lock.schema.json | 106 + tests/corpus/scripts/fetchCorpus.mjs | 144 + tests/corpus/scripts/lib/artifacts.mjs | 23 + tests/corpus/scripts/lib/corpus.mjs | 377 + .../corpus/scripts/lib/structuralCatalog.mjs | 483 + tests/corpus/scripts/verifyCorpus.mjs | 32 + tests/corpus/structuralCatalog.json | 28520 ++++++++++++++++ tests/corpus/structuralCatalog.spec.js | 323 + tests/e2e/accessibility.spec.js | 349 + ...accessibilityLifecycleKnownDefects.spec.js | 147 + tests/e2e/assets/FemaleBaldness1.png | Bin 0 -> 39347 bytes tests/e2e/assets/fonts.lock.json | 21 + .../assets/fonts/OFL-Libre-Baskerville.txt | 93 + .../fonts/libre-baskerville-latin-400-v24.ttf | Bin 0 -> 106728 bytes tests/e2e/authoring.spec.js | 566 + tests/e2e/authoringKnownDefects.spec.js | 42 + tests/e2e/backDeletion.spec.js | 124 + tests/e2e/connectExperiencePaths.spec.js | 132 + tests/e2e/constructs.spec.js | 96 + tests/e2e/corpusAsyncHooks.spec.js | 159 + .../corpusConditionProbeRegressions.spec.js | 35 + tests/e2e/corpusFullRender.spec.js | 120 + tests/e2e/corpusParticipant.spec.js | 51 + tests/e2e/gridDeepCoverage.spec.js | 77 + .../e2e/gridDeepCoverageKnownDefects.spec.js | 43 + tests/e2e/knownDefects.spec.js | 249 + tests/e2e/module2PregnancyPaths.spec.js | 121 + tests/e2e/module4AddressPaths.spec.js | 237 + tests/e2e/participantAsync.spec.js | 74 + tests/e2e/participantControls.spec.js | 212 + tests/e2e/participantNavigationState.spec.js | 272 + tests/e2e/popoverAccessibility.spec.js | 46 + tests/e2e/productionCompoundForms.spec.js | 173 + tests/e2e/productionFanoutXor.spec.js | 207 + tests/e2e/productionLoopCoverage.spec.js | 224 + tests/e2e/productionPiping.spec.js | 275 + tests/e2e/responsive.spec.js | 161 + ...grid-chromium-desktop-chromium-desktop.png | Bin 0 -> 9373 bytes ...ant-grid-chromium-phone-chromium-phone.png | Bin 0 -> 8156 bytes ...t-grid-chromium-tablet-chromium-tablet.png | Bin 0 -> 7044 bytes tests/e2e/storageConcurrency.spec.js | 65 + tests/e2e/support/authoring.js | 254 + tests/e2e/support/axe.js | 37 + tests/e2e/support/corpus.js | 47 + tests/e2e/support/gridDeepCoverageFixtures.js | 41 + tests/e2e/support/harness.js | 71 + tests/e2e/support/test.js | 180 + tests/e2e/temporalInputPartitions.spec.js | 51 + tests/e2e/visual.spec.js | 109 + .../authoring-workspace-chromium-desktop.png | Bin 0 -> 53858 bytes ...icipant-choice-layout-chromium-desktop.png | Bin 0 -> 1958 bytes ...cipant-keyboard-focus-chromium-desktop.png | Bin 0 -> 1297 bytes ...articipant-soft-modal-chromium-desktop.png | Bin 0 -> 2038 bytes ...pant-validation-state-chromium-desktop.png | Bin 0 -> 5297 bytes tests/e2e/windowsEnvironment.spec.js | 65 + tests/fixtures/canonical/allConstructs.txt | 81 + tests/fixtures/canonical/asyncQuestion.txt | 10 + .../fixtures/canonical/gridCheckboxFocus.txt | 8 + tests/fixtures/canonical/gridResponsive.txt | 8 + tests/fixtures/canonical/imageAlt.txt | 4 + tests/fixtures/canonical/loopBoundaries.txt | 12 + .../canonical/module4AddressPaths.txt | 50 + .../canonical/module4AddressPathsSpanish.txt | 39 + tests/fixtures/canonical/nativeSelect.txt | 6 + .../canonical/navigationBoundaries.txt | 23 + tests/fixtures/canonical/navigationState.txt | 13 + .../fixtures/canonical/nestedTextPresence.txt | 18 + tests/fixtures/canonical/runtimeControls.txt | 27 + tests/fixtures/canonical/validation.txt | 6 + tests/harness/connectHost.css | 38 + tests/harness/mathjsLocal.js | 3 + tests/harness/participant.html | 43 + tests/harness/participant.js | 253 + tests/helpers/questRuntime.js | 105 + .../integration/accessibilityBehavior.spec.js | 124 + .../integration/accessibilityBuilder.spec.js | 229 + tests/integration/eventHandlers.spec.js | 174 + tests/integration/gridDeepCoverage.spec.js | 258 + tests/integration/hostFailures.spec.js | 40 + tests/integration/mainRender.spec.js | 186 + tests/integration/offlineBoundary.spec.js | 19 + .../productionLoopCoverage.spec.js | 218 + tests/integration/questionProcessor.spec.js | 677 + .../integration/questionnaireHelpers.spec.js | 202 + tests/integration/responsePiping.spec.js | 163 + tests/integration/restoreResponses.spec.js | 125 + tests/integration/validation.spec.js | 205 + tests/knownDefects/registry.js | 97 + tests/knownDefects/runtime.spec.js | 298 + tests/knownDefects/vitest.config.js | 19 + tests/quality/scripts/checkTestOnlyScope.mjs | 155 + tests/scripts/runKnownDefects.mjs | 32 + tests/setup/jsdom.js | 115 + tests/unit/buildGrid.spec.js | 65 + tests/unit/customMath.spec.js | 242 + tests/unit/evaluateConditions.spec.js | 67 + tests/unit/knownDefectRegistry.spec.js | 20 + tests/unit/knownFunctions.spec.js | 73 + tests/unit/stateManager.spec.js | 386 + tests/unit/testOnlyScope.spec.js | 156 + tests/unit/tree.spec.js | 167 + vite.config.js | 16 + vitest.config.js | 41 + 120 files changed, 45559 insertions(+) create mode 100644 .github/workflows/quest-pr.yml create mode 100644 .node-version create mode 100644 .nvmrc create mode 100644 docs/accessibilityManualTest.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 playwright.config.js create mode 100644 tests/README.md create mode 100644 tests/config/moduleResolution.js create mode 100644 tests/corpus/README.md create mode 100644 tests/corpus/corpusIntegrity.spec.js create mode 100644 tests/corpus/hostPersonas.json create mode 100644 tests/corpus/lock.json create mode 100644 tests/corpus/module4AddressStructure.spec.js create mode 100644 tests/corpus/responsePipingStructure.spec.js create mode 100644 tests/corpus/schemas/lock.schema.json create mode 100644 tests/corpus/scripts/fetchCorpus.mjs create mode 100644 tests/corpus/scripts/lib/artifacts.mjs create mode 100644 tests/corpus/scripts/lib/corpus.mjs create mode 100644 tests/corpus/scripts/lib/structuralCatalog.mjs create mode 100644 tests/corpus/scripts/verifyCorpus.mjs create mode 100644 tests/corpus/structuralCatalog.json create mode 100644 tests/corpus/structuralCatalog.spec.js create mode 100644 tests/e2e/accessibility.spec.js create mode 100644 tests/e2e/accessibilityLifecycleKnownDefects.spec.js create mode 100644 tests/e2e/assets/FemaleBaldness1.png create mode 100644 tests/e2e/assets/fonts.lock.json create mode 100644 tests/e2e/assets/fonts/OFL-Libre-Baskerville.txt create mode 100644 tests/e2e/assets/fonts/libre-baskerville-latin-400-v24.ttf create mode 100644 tests/e2e/authoring.spec.js create mode 100644 tests/e2e/authoringKnownDefects.spec.js create mode 100644 tests/e2e/backDeletion.spec.js create mode 100644 tests/e2e/connectExperiencePaths.spec.js create mode 100644 tests/e2e/constructs.spec.js create mode 100644 tests/e2e/corpusAsyncHooks.spec.js create mode 100644 tests/e2e/corpusConditionProbeRegressions.spec.js create mode 100644 tests/e2e/corpusFullRender.spec.js create mode 100644 tests/e2e/corpusParticipant.spec.js create mode 100644 tests/e2e/gridDeepCoverage.spec.js create mode 100644 tests/e2e/gridDeepCoverageKnownDefects.spec.js create mode 100644 tests/e2e/knownDefects.spec.js create mode 100644 tests/e2e/module2PregnancyPaths.spec.js create mode 100644 tests/e2e/module4AddressPaths.spec.js create mode 100644 tests/e2e/participantAsync.spec.js create mode 100644 tests/e2e/participantControls.spec.js create mode 100644 tests/e2e/participantNavigationState.spec.js create mode 100644 tests/e2e/popoverAccessibility.spec.js create mode 100644 tests/e2e/productionCompoundForms.spec.js create mode 100644 tests/e2e/productionFanoutXor.spec.js create mode 100644 tests/e2e/productionLoopCoverage.spec.js create mode 100644 tests/e2e/productionPiping.spec.js create mode 100644 tests/e2e/responsive.spec.js create mode 100644 tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-desktop-chromium-desktop.png create mode 100644 tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-phone-chromium-phone.png create mode 100644 tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-tablet-chromium-tablet.png create mode 100644 tests/e2e/storageConcurrency.spec.js create mode 100644 tests/e2e/support/authoring.js create mode 100644 tests/e2e/support/axe.js create mode 100644 tests/e2e/support/corpus.js create mode 100644 tests/e2e/support/gridDeepCoverageFixtures.js create mode 100644 tests/e2e/support/harness.js create mode 100644 tests/e2e/support/test.js create mode 100644 tests/e2e/temporalInputPartitions.spec.js create mode 100644 tests/e2e/visual.spec.js create mode 100644 tests/e2e/visual.spec.js-snapshots/authoring-workspace-chromium-desktop.png create mode 100644 tests/e2e/visual.spec.js-snapshots/participant-choice-layout-chromium-desktop.png create mode 100644 tests/e2e/visual.spec.js-snapshots/participant-keyboard-focus-chromium-desktop.png create mode 100644 tests/e2e/visual.spec.js-snapshots/participant-soft-modal-chromium-desktop.png create mode 100644 tests/e2e/visual.spec.js-snapshots/participant-validation-state-chromium-desktop.png create mode 100644 tests/e2e/windowsEnvironment.spec.js create mode 100644 tests/fixtures/canonical/allConstructs.txt create mode 100644 tests/fixtures/canonical/asyncQuestion.txt create mode 100644 tests/fixtures/canonical/gridCheckboxFocus.txt create mode 100644 tests/fixtures/canonical/gridResponsive.txt create mode 100644 tests/fixtures/canonical/imageAlt.txt create mode 100644 tests/fixtures/canonical/loopBoundaries.txt create mode 100644 tests/fixtures/canonical/module4AddressPaths.txt create mode 100644 tests/fixtures/canonical/module4AddressPathsSpanish.txt create mode 100644 tests/fixtures/canonical/nativeSelect.txt create mode 100644 tests/fixtures/canonical/navigationBoundaries.txt create mode 100644 tests/fixtures/canonical/navigationState.txt create mode 100644 tests/fixtures/canonical/nestedTextPresence.txt create mode 100644 tests/fixtures/canonical/runtimeControls.txt create mode 100644 tests/fixtures/canonical/validation.txt create mode 100644 tests/harness/connectHost.css create mode 100644 tests/harness/mathjsLocal.js create mode 100644 tests/harness/participant.html create mode 100644 tests/harness/participant.js create mode 100644 tests/helpers/questRuntime.js create mode 100644 tests/integration/accessibilityBehavior.spec.js create mode 100644 tests/integration/accessibilityBuilder.spec.js create mode 100644 tests/integration/eventHandlers.spec.js create mode 100644 tests/integration/gridDeepCoverage.spec.js create mode 100644 tests/integration/hostFailures.spec.js create mode 100644 tests/integration/mainRender.spec.js create mode 100644 tests/integration/offlineBoundary.spec.js create mode 100644 tests/integration/productionLoopCoverage.spec.js create mode 100644 tests/integration/questionProcessor.spec.js create mode 100644 tests/integration/questionnaireHelpers.spec.js create mode 100644 tests/integration/responsePiping.spec.js create mode 100644 tests/integration/restoreResponses.spec.js create mode 100644 tests/integration/validation.spec.js create mode 100644 tests/knownDefects/registry.js create mode 100644 tests/knownDefects/runtime.spec.js create mode 100644 tests/knownDefects/vitest.config.js create mode 100644 tests/quality/scripts/checkTestOnlyScope.mjs create mode 100644 tests/scripts/runKnownDefects.mjs create mode 100644 tests/setup/jsdom.js create mode 100644 tests/unit/buildGrid.spec.js create mode 100644 tests/unit/customMath.spec.js create mode 100644 tests/unit/evaluateConditions.spec.js create mode 100644 tests/unit/knownDefectRegistry.spec.js create mode 100644 tests/unit/knownFunctions.spec.js create mode 100644 tests/unit/stateManager.spec.js create mode 100644 tests/unit/testOnlyScope.spec.js create mode 100644 tests/unit/tree.spec.js create mode 100644 vite.config.js create mode 100644 vitest.config.js diff --git a/.github/workflows/quest-pr.yml b/.github/workflows/quest-pr.yml new file mode 100644 index 0000000..a7fd896 --- /dev/null +++ b/.github/workflows/quest-pr.yml @@ -0,0 +1,175 @@ +name: Quest tests + +on: + pull_request: + branches: [main] + push: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: quest-tests-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + CI: "true" + FORCE_COLOR: "1" + +jobs: + quality: + name: Unit, integration, and corpus integrity + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + - name: Enforce the test-only bootstrap scope + if: github.event_name == 'pull_request' && github.head_ref == 'quest-2-test-suite' + run: npm run quality:test-only-scope -- --head "${{ github.event.pull_request.head.sha }}" + - run: npm ci + - uses: actions/cache@v4 + with: + path: .cache/questionnaire + key: questionnaire-${{ runner.os }}-${{ hashFiles('tests/corpus/lock.json') }} + - run: npm run corpus:fetch + - run: npm run corpus:verify + - name: Run Vitest with coverage and JUnit output + run: | + mkdir -p test-results + npx vitest run --coverage --reporter=default --reporter=junit --outputFile.junit=test-results/vitest-junit.xml + - name: Publish unit-test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: quest-unit-reports + retention-days: 14 + if-no-files-found: warn + path: | + coverage/ + test-results/vitest-junit.xml + + chromium: + name: Chromium participant and authoring + needs: quality + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + - run: npm ci + - uses: actions/cache@v4 + with: + path: .cache/questionnaire + key: questionnaire-${{ runner.os }}-${{ hashFiles('tests/corpus/lock.json') }} + - run: npm run corpus:fetch && npm run corpus:verify + - run: npx playwright install --with-deps chromium + - name: Run the curated desktop suite and all 29 production smoke tests + run: npm run test:e2e:chromium + - name: Run representative responsive and Windows branches + run: | + npm run test:e2e:responsive + npm run test:e2e:windows + - name: Publish Chromium failure diagnostics + if: failure() + uses: actions/upload-artifact@v4 + with: + name: quest-chromium-failures + retention-days: 14 + if-no-files-found: warn + path: | + playwright-report/ + test-results/ + + cross-browser: + name: Representative ${{ matrix.project }} + needs: quality + runs-on: ubuntu-24.04 + strategy: + fail-fast: false + matrix: + include: + - project: firefox-desktop + browser: firefox + - project: webkit-desktop + browser: webkit + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + - run: npm ci + - run: npx playwright install --with-deps ${{ matrix.browser }} + - name: Run canonical, axe, and representative authoring checks + run: npx playwright test --project=${{ matrix.project }} --grep "@canonical|@axe|@cross-browser-authoring" --grep-invert @known-defect + - name: Publish browser failure diagnostics + if: failure() + uses: actions/upload-artifact@v4 + with: + name: quest-${{ matrix.project }}-failures + retention-days: 14 + if-no-files-found: warn + path: | + playwright-report/ + test-results/ + + known-defects: + name: Known defects (non-blocking) + needs: quality + continue-on-error: true + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + - run: npm ci + - uses: actions/cache@v4 + with: + path: .cache/questionnaire + key: questionnaire-${{ runner.os }}-${{ hashFiles('tests/corpus/lock.json') }} + - run: npm run corpus:fetch && npm run corpus:verify + - run: npx playwright install --with-deps chromium firefox webkit + - run: npm run test:known-defects + - name: Publish known-defect diagnostics + if: always() + uses: actions/upload-artifact@v4 + with: + name: quest-known-defects + retention-days: 14 + if-no-files-found: warn + path: | + playwright-report/ + test-results/ + + required: + name: Quest tests / required + if: always() + needs: [quality, chromium, cross-browser] + runs-on: ubuntu-24.04 + steps: + - name: Require all blocking lanes + env: + RESULTS: ${{ toJSON(needs) }} + run: | + if ! jq -e 'all(.[]; .result == "success")' <<< "$RESULTS" >/dev/null; then + echo "$RESULTS" | jq . + exit 1 + fi diff --git a/.gitignore b/.gitignore index f77ecea..ea65225 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,8 @@ questionnaires/d2.txt node_modules testmodules testcode +.cache/ +coverage/ +playwright-report/ +test-results/ +tests/generated/reports/ diff --git a/.node-version b/.node-version new file mode 100644 index 0000000..b832e40 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +24.16.0 diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..b832e40 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +24.16.0 diff --git a/README.md b/README.md index f7ae055..8fef8a0 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,5 @@ [![Join the chat at https://gitter.im/episphere/quest](https://badges.gitter.im/episphere/quest.svg)](https://gitter.im/episphere/quest?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Experimenting with the idea of a questionnaire markdown, live at https://episphere.github.io/quest-dev + +See the [Quest test suite](tests/README.md) for setup and test commands. diff --git a/docs/accessibilityManualTest.md b/docs/accessibilityManualTest.md new file mode 100644 index 0000000..2186563 --- /dev/null +++ b/docs/accessibilityManualTest.md @@ -0,0 +1,139 @@ +# Quest 2 accessibility manual test matrix + +Scope: **Quest 2 participant runtime only** + +Browser automation can inspect DOM semantics, focus, state, and live regions, but it does not run VoiceOver or JAWS and cannot prove what either screen reader announces. This matrix describes those manual accessibility testing processes. + +## Test boundary + +- Use only non-production participant data and the canonical fixtures under `tests/fixtures/canonical/`. +- On the target test machine, install the Node version in `.node-version`, run `npm ci`, and install the + browser binaries with `npx playwright install chromium firefox webkit`. +- Start the server with `npm run harness:start`. Leave that terminal running. +- Open + `http://127.0.0.1:4173/tests/harness/participant.html?fixture=runtimeControls.txt` + in Safari for VoiceOver, or in Chrome/Edge on Windows 11 for JAWS. The query + loads the public synthetic canonical control fixture automatically. +- For radio-grid steps, reload a fresh page at the same URL with + `fixture=gridResponsive.txt`; for checkbox-grid focus branches use + `fixture=gridCheckboxFocus.txt`; for validation use + `fixture=validation.txt`; for navigation/restoration use + `fixture=navigationState.txt`. +- Keep Quest inside `#root > .row > #questionnaireRoot`. +- Start each scenario from a new browser page. Quest owns module-level state and a second render in the same page is not a supported isolation boundary. +- Do not enable browser extensions other than the screen reader under test. +- Record operating-system, browser, screen-reader, and Quest commit/version values before testing. +- Run `npm run test:e2e -- --grep "@canonical|@axe|@responsive|@windows-a11y"` first. Automated results are prerequisites, not substitutes for this matrix. + +## Environment matrix + +| ID | Operating system | Browser | Assistive technology | Required modes | +| --- | --- | --- | --- | --- | +| KBD-MAC | Current supported macOS | Safari | None | Full Keyboard Access on | +| VO-SAF | Current supported macOS | Safari | VoiceOver | Quick Nav off, then Quick Nav on | +| KBD-WIN | Windows 11 | Current Chrome and Edge | None | Browser default keyboard handling | +| JAWS-CHR | Windows 11 | Current Chrome | Current supported JAWS | Virtual Cursor, Forms Mode | +| JAWS-EDG | Windows 11 | Current Edge | Current supported JAWS | Virtual Cursor, Forms Mode | + +“Current” must be replaced with exact version numbers in the test record. Playwright WebKit is not Safari plus VoiceOver, and Chromium with a Windows user-agent string is not JAWS. + +## Keyboard-only baseline — issue #1587 + +Run KBD-MAC and KBD-WIN without a screen reader. Repeat in both Chrome and Edge for KBD-WIN. + +| Step | Action | Expected result | +| --- | --- | --- | +| 1 | Tab from “Participant dashboard” | Focus follows DOM order and is always visibly indicated; it does not disappear into a hidden control. | +| 2 | Shift+Tab | Focus returns to the immediately preceding operable control. | +| 3 | Focus a link and press Enter | The link performs its native action. | +| 4 | Focus Next, Reset, and Back; press Enter, then repeat with Space | Each button performs exactly one action with either key. | +| 5 | Focus an unchecked checkbox and press Space twice | Checked state becomes true, then false; the live message agrees with state. | +| 6 | Focus a radio group and use Up/Down and Left/Right | Focus and selection move within the group; exactly one option remains checked. | +| 7 | Focus a native select; use Alt+Down or Space as appropriate for the browser, arrows, Enter, and Escape | The browser opens, navigates, commits, and dismisses the native control without a custom Quest key trap. | +| 8 | On a text question, Tab through actions | Tab order is Next, Reset, Back even though desktop visual order is Back, Reset, Next. | +| 9 | Repeat the response-grid fixture at phone width | Each stacked response remains operable and its checked state is visible. | + +Raw browser key expectations apply only to this keyboard-only baseline. Do not file a failure solely because a screen reader reserves or reroutes one of these keys. + +## VoiceOver with Safari — issue #1079 + +First run with Quick Nav off. Repeat response navigation and activation with Quick Nav on, and record the VoiceOver command actually used. + +1. Start VoiceOver before loading the page and open the canonical control fixture. +2. Confirm the survey boundary and the first question are announced once. The question must have a meaningful group/legend name. +3. Navigate by form controls and by VoiceOver cursor. Each response must expose role, name, and selected/checked state; styled labels alone are insufficient. +4. Activate a response with the VoiceOver default action (normally VO+Space). Confirm the visual selection, DOM checked state, and polite live announcement all agree. +5. Navigate forward. Focus must land at the newly active question context after the deliberate delay; it must not remain on a removed button or move to the PWA header/footer. +6. Use Back. Confirm the earlier response is restored and announced with the correct checked state. +7. Exercise text, number, select, date, and time controls. Confirm each control has a useful name and browser-native editing still works. +8. Trigger required and range validation. Confirm the error is announced, focus remains in the question, and correction clears the error. +9. Exercise the response grid. Confirm row prompt, column option, and selected state are available together. +10. Open and close soft-validation and submit dialogs. Confirm dialog name, focus entry, keyboard containment, close action, and return focus. + +## JAWS with Chrome and Edge — issue #1079 + +Run each browser once. State explicitly whether each observation occurred in Virtual Cursor or Forms Mode. + +1. Start JAWS before opening the canonical control fixture. +2. In Virtual Cursor, navigate to the survey and confirm the first question is announced once with its group name. +3. Enumerate form controls. Every choice must expose radio/checkbox role, name, and checked state; a focusable generic response container is not an adequate replacement. +4. Enter Forms Mode and activate a choice with the JAWS default action. Confirm visual state, DOM state, and live announcement agree. +5. Use the response container/list navigation supplied for Windows. Confirm there is no dead tab stop and no double activation. +6. For radio groups, verify native group exclusivity and arrow behavior while in the appropriate mode. +7. For “Other” text responses, use Up/Down navigation around the embedded text field. Confirm focus neither traps nor skips the neighboring response. +8. Exercise both grid fixtures. After a radio selection, confirm the next row prompt is announced; after the last radio row, confirm focus proceeds to Next. In the checkbox grid, confirm an intermediate selection stays in its cell and the terminal selection proceeds to Next. +9. Repeat Next, Back, validation, state restoration, async success/error, and modal focus scenarios from the VoiceOver matrix. +10. Exit Forms Mode and confirm the Virtual Cursor resumes at a sensible location in the active question. + +## Evidence to capture + +For every failure, record: + +- environment ID and exact OS/browser/screen-reader versions; +- Quick Nav, Virtual Cursor, or Forms Mode state; +- fixture, question ID, response ID, and viewport; +- the physical keys and screen-reader command used; +- expected versus actual role, accessible name, checked state, focus target, and spoken output; +- whether visual DOM state and stored Quest state changed; +- a minimal reproduction trace or video with participant data removed; +- the related issue: [#1079](https://github.com/episphere/connect/issues/1079) for JAWS/VoiceOver behavior or [#1587](https://github.com/episphere/connect/issues/1587) for keyboard-only operation. + +Pass only when the keyboard-only matrix succeeds independently and both screen readers expose correct role/name/state and predictable focus. A Playwright pass, a user-agent simulation, or success in only one screen-reader mode is not sufficient. + +## Test record + +Copy this table into the issue or test report for every execution. Do not replace exact versions with “latest” or “current.” + +| Field | Recorded value | +| --- | --- | +| Protocol version | 1.0.0 | +| Quest commit and Quest version | | +| Questionnaire fixture/version | | +| Environment ID | | +| OS name, edition, and exact version | | +| Browser name and exact version | | +| Assistive technology and exact version | | +| AT mode / Quick Nav / Full Keyboard Access | | +| Tester and date | | +| Automated prerequisite run URL/result | | +| Steps passed | | +| Steps failed | | +| Issue/evidence links | | +| Overall result | PASS / FAIL / BLOCKED | + +Record each step separately; an aggregate PASS must never hide a skipped browser, +assistive-technology mode, or interaction. + +| Environment ID | Procedure / step | AT mode | Result | Actual focus, role/name/state, and spoken output | Evidence / defect | +| --- | --- | --- | --- | --- | --- | +| KBD-MAC | Keyboard 1 | Full Keyboard Access | PASS / FAIL / BLOCKED / NOT RUN | | | +| VO-SAF | VoiceOver 1 | Quick Nav off | PASS / FAIL / BLOCKED / NOT RUN | | | +| VO-SAF | VoiceOver 1 | Quick Nav on | PASS / FAIL / BLOCKED / NOT RUN | | | +| KBD-WIN | Keyboard 1 | Browser default | PASS / FAIL / BLOCKED / NOT RUN | | | +| JAWS-CHR | JAWS 1 | Virtual Cursor | PASS / FAIL / BLOCKED / NOT RUN | | | +| JAWS-CHR | JAWS 1 | Forms Mode | PASS / FAIL / BLOCKED / NOT RUN | | | +| JAWS-EDG | JAWS 1 | Virtual Cursor | PASS / FAIL / BLOCKED / NOT RUN | | | +| JAWS-EDG | JAWS 1 | Forms Mode | PASS / FAIL / BLOCKED / NOT RUN | | | + +Duplicate rows for every numbered step in the applicable procedure. `NOT RUN` +is not a pass and requires a reason in the final column. diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..359c6cb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3301 @@ +{ + "name": "@episphere/quest-dev-tests", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@episphere/quest-dev-tests", + "version": "0.0.0", + "devDependencies": { + "@axe-core/playwright": "4.10.2", + "@fortawesome/fontawesome-free": "6.4.2", + "@playwright/test": "1.60.0", + "@vitest/coverage-v8": "3.2.7", + "bootstrap": "5.3.3", + "bootstrap-authoring": "npm:bootstrap@5.3.2", + "jsdom": "29.1.1", + "localforage": "1.10.0", + "mathjs": "13.0.3", + "vite": "7.3.6", + "vitest": "3.2.7" + }, + "engines": { + "node": "24.x" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", + "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@csstools/css-calc": "^3.2.0", + "@csstools/css-color-parser": "^4.1.0", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz", + "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/generational-cache": "^1.0.1", + "@asamuzakjp/nwsapi": "^2.3.9", + "bidi-js": "^1.0.3", + "css-tree": "^3.2.1", + "is-potential-custom-element-name": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/generational-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz", + "integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@asamuzakjp/nwsapi": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz", + "integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@axe-core/playwright": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.10.2.tgz", + "integrity": "sha512-6/b5BJjG6hDaRNtgzLIfKr5DfwyiLHO4+ByTLB0cJgWSM8Ll7KqtdblIS6bEkwSF642/Ex91vNqIl3GLXGlceg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "axe-core": "~4.10.3" + }, + "peerDependencies": { + "playwright-core": ">= 1.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", + "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@bramus/specificity": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz", + "integrity": "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^3.0.0" + }, + "bin": { + "specificity": "bin/cli.js" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz", + "integrity": "sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@csstools/css-calc": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.3.0.tgz", + "integrity": "sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.10.tgz", + "integrity": "sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^6.1.0", + "@csstools/css-calc": "^3.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz", + "integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^4.0.0" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz", + "integrity": "sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz", + "integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=20.19.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@exodus/bytes": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz", + "integrity": "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "peerDependencies": { + "@noble/hashes": "^1.8.0 || ^2.0.0" + }, + "peerDependenciesMeta": { + "@noble/hashes": { + "optional": true + } + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "dev": true, + "hasInstallScript": true, + "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)", + "engines": { + "node": ">=6" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", + "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@playwright/test": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.60.0.tgz", + "integrity": "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz", + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz", + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz", + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz", + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz", + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz", + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz", + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz", + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz", + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz", + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz", + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz", + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz", + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz", + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz", + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz", + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz", + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz", + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz", + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz", + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz", + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz", + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz", + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz", + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz", + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/coverage-v8": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.7.tgz", + "integrity": "sha512-NEGWJS2XNu2PfRLQwOO3CTKj1tTETxNBdk454vDxVBhxJYhPaA/eS0nAI0c+1El1P7a60z8+i+ZrQoGESweGKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "3.2.7", + "vitest": "3.2.7" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz", + "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz", + "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.7", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz", + "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz", + "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.7", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz", + "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz", + "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz", + "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.7", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.12.tgz", + "integrity": "sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^10.0.0" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/bootstrap-authoring": { + "name": "bootstrap", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/complex.js": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.3.tgz", + "integrity": "sha512-UrQVSUur14tNX6tiP4y8T4w4FeJAX3bi2cIv0pu/DTLFNxoq7z2Yh83Vfzztj6Px3X/lubqQ9IrPp7Bpn6p4MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" + } + }, + "node_modules/escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==", + "dev": true, + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", + "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^5.1.11", + "@asamuzakjp/dom-selector": "^7.1.1", + "@bramus/specificity": "^2.4.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@exodus/bytes": "^1.15.0", + "css-tree": "^3.2.1", + "data-urls": "^7.0.0", + "decimal.js": "^10.6.0", + "html-encoding-sniffer": "^6.0.0", + "is-potential-custom-element-name": "^1.0.1", + "lru-cache": "^11.3.5", + "parse5": "^8.0.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^6.0.1", + "undici": "^7.25.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^8.0.1", + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.1", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24.0.0" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz", + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathjs": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-13.0.3.tgz", + "integrity": "sha512-GpP9OW6swA5POZXvgpc/1FYkAr8lKgV04QHS1tIU60klFfplVCYaNzn6qy0vSp0hAQQN7shcx9CeB507dlLujA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.24.8", + "complex.js": "^2.1.1", + "decimal.js": "^10.4.3", + "escape-latex": "^1.2.0", + "fraction.js": "^4.3.7", + "javascript-natural-sort": "^0.7.1", + "seedrandom": "^3.0.5", + "tiny-emitter": "^2.1.0", + "typed-function": "^4.2.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/minimatch": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.8" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.17", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", + "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", + "integrity": "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^8.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright/node_modules/playwright-core": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/postcss": { + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.62.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz", + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.62.4", + "@rollup/rollup-android-arm64": "4.62.4", + "@rollup/rollup-darwin-arm64": "4.62.4", + "@rollup/rollup-darwin-x64": "4.62.4", + "@rollup/rollup-freebsd-arm64": "4.62.4", + "@rollup/rollup-freebsd-x64": "4.62.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4", + "@rollup/rollup-linux-arm-musleabihf": "4.62.4", + "@rollup/rollup-linux-arm64-gnu": "4.62.4", + "@rollup/rollup-linux-arm64-musl": "4.62.4", + "@rollup/rollup-linux-loong64-gnu": "4.62.4", + "@rollup/rollup-linux-loong64-musl": "4.62.4", + "@rollup/rollup-linux-ppc64-gnu": "4.62.4", + "@rollup/rollup-linux-ppc64-musl": "4.62.4", + "@rollup/rollup-linux-riscv64-gnu": "4.62.4", + "@rollup/rollup-linux-riscv64-musl": "4.62.4", + "@rollup/rollup-linux-s390x-gnu": "4.62.4", + "@rollup/rollup-linux-x64-gnu": "4.62.4", + "@rollup/rollup-linux-x64-musl": "4.62.4", + "@rollup/rollup-openbsd-x64": "4.62.4", + "@rollup/rollup-openharmony-arm64": "4.62.4", + "@rollup/rollup-win32-arm64-msvc": "4.62.4", + "@rollup/rollup-win32-ia32-msvc": "4.62.4", + "@rollup/rollup-win32-x64-gnu": "4.62.4", + "@rollup/rollup-win32-x64-msvc": "4.62.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.2.tgz", + "integrity": "sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^10.2.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.10.tgz", + "integrity": "sha512-GgouD1B+sWwvkaEq8vXC15DjQitxbvs12oIXELpconwm+Tg3zfcEv4jgzq3vtKverDXsg3VI8aRgNL2Nra0Iog==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^7.4.10" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.10.tgz", + "integrity": "sha512-KnQjp53ZekKgm/r3l+u8kJGGzYgrWdP8+Mql7a4vijh2WE0IrZWspQj/TpTxDho/YxO+AnOZnIjQcCD+q6iJsw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", + "integrity": "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz", + "integrity": "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/typed-function": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.2.tgz", + "integrity": "sha512-VwaXim9Gp1bngi/q3do8hgttYn2uC3MoT/gfuMWylnj1IeZBUAyPddHZlo1K05BDoj8DYPpMdiHqH1dDYdJf2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/undici": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.29.0.tgz", + "integrity": "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/vite": { + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0 || ^0.28.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz", + "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.7", + "@vitest/mocker": "3.2.7", + "@vitest/pretty-format": "^3.2.7", + "@vitest/runner": "3.2.7", + "@vitest/snapshot": "3.2.7", + "@vitest/spy": "3.2.7", + "@vitest/utils": "3.2.7", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.7", + "@vitest/ui": "3.2.7", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", + "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-mimetype": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", + "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/whatwg-url": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz", + "integrity": "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.11.0", + "tr46": "^6.0.0", + "webidl-conversions": "^8.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3769698 --- /dev/null +++ b/package.json @@ -0,0 +1,43 @@ +{ + "name": "@episphere/quest-dev-tests", + "private": true, + "version": "0.0.0", + "type": "module", + "engines": { + "node": "24.x" + }, + "scripts": { + "test": "vitest run tests/unit tests/integration", + "test:watch": "vitest tests/unit tests/integration", + "test:corpus": "vitest run tests/corpus", + "test:coverage": "vitest run --coverage", + "quality:test-only-scope": "node tests/quality/scripts/checkTestOnlyScope.mjs", + "test:e2e": "playwright test", + "test:e2e:chromium": "playwright test --project=chromium-desktop --grep-invert @known-defect", + "test:e2e:cross-browser": "playwright test --project=firefox-desktop --project=webkit-desktop --grep \"@canonical|@axe|@cross-browser-authoring\" --grep-invert @known-defect", + "test:e2e:responsive": "playwright test --project=chromium-phone --project=chromium-tablet --grep \"@responsive|@axe\" --grep-invert @known-defect", + "test:e2e:windows": "playwright test --project=chromium-windows-ua --grep \"@windows-a11y|@axe\" --grep-invert @known-defect", + "harness:start": "vite --config vite.config.js --host 127.0.0.1", + "test:e2e:known-defects": "playwright test --grep @known-defect", + "test:known-defects": "node tests/scripts/runKnownDefects.mjs", + "test:pr": "npm run corpus:fetch && npm run corpus:verify && npm run test:coverage && npm run test:e2e:chromium && npm run test:e2e:cross-browser && npm run test:e2e:responsive && npm run test:e2e:windows", + "test:visual:update": "playwright test --project=chromium-desktop --project=chromium-phone --project=chromium-tablet --grep @visual --update-snapshots", + "corpus:fetch": "node tests/corpus/scripts/fetchCorpus.mjs", + "corpus:verify": "node tests/corpus/scripts/verifyCorpus.mjs", + "corpus:catalog:verify": "vitest run tests/corpus/structuralCatalog.spec.js", + "corpus:catalog:update": "vitest run tests/corpus/structuralCatalog.spec.js --update" + }, + "devDependencies": { + "@axe-core/playwright": "4.10.2", + "@fortawesome/fontawesome-free": "6.4.2", + "@playwright/test": "1.60.0", + "@vitest/coverage-v8": "3.2.7", + "bootstrap": "5.3.3", + "bootstrap-authoring": "npm:bootstrap@5.3.2", + "jsdom": "29.1.1", + "localforage": "1.10.0", + "mathjs": "13.0.3", + "vite": "7.3.6", + "vitest": "3.2.7" + } +} diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000..2f905c7 --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,66 @@ +import { defineConfig, devices } from '@playwright/test'; + +const testServerPort = Number.parseInt(process.env.QUEST_PLAYWRIGHT_PORT ?? '4173', 10); +const testServerOrigin = `http://127.0.0.1:${testServerPort}`; + +const desktopProjects = [ + { name: 'chromium-desktop', use: { ...devices['Desktop Chrome'] } }, + { name: 'firefox-desktop', use: { ...devices['Desktop Firefox'] } }, + { name: 'webkit-desktop', use: { ...devices['Desktop Safari'] } }, +]; + +export default defineConfig({ + testDir: './tests/e2e', + testMatch: '**/*.spec.js', + timeout: 45_000, + expect: { timeout: 10_000 }, + fullyParallel: true, + forbidOnly: Boolean(process.env.CI), + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 4 : undefined, + reporter: process.env.CI + ? [['list'], ['junit', { outputFile: 'test-results/playwright-junit.xml' }], ['html', { open: 'never' }]] + : [['list'], ['html', { open: 'never' }]], + use: { + baseURL: testServerOrigin, + locale: 'en-US', + timezoneId: 'UTC', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + video: 'retain-on-failure', + serviceWorkers: 'block', + }, + projects: [ + ...desktopProjects, + { + name: 'chromium-phone', + use: { + ...devices['Desktop Chrome'], + viewport: { width: 390, height: 844 }, + isMobile: true, + hasTouch: true, + }, + }, + { + name: 'chromium-tablet', + use: { + ...devices['Desktop Chrome'], + viewport: { width: 820, height: 1180 }, + hasTouch: true, + }, + }, + { + name: 'chromium-windows-ua', + use: { + ...devices['Desktop Chrome'], + userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36', + }, + }, + ], + webServer: { + command: `npx vite --config vite.config.js --port ${testServerPort}`, + url: `${testServerOrigin}/tests/harness/participant.html`, + reuseExistingServer: !process.env.CI, + timeout: 60_000, + }, +}); diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..4088817 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,61 @@ +# Quest test suite + +Quest owns this standalone Node 24 test package. It does not boot the Connect +PWA; browser tests embed Quest in a stable Connect-shaped page and call the +existing `transform.render(...)` API. + +## Setup + +1. Use the Node patch in `.node-version` and `.nvmrc`. +2. Run `npm ci`. +3. Run `npx playwright install chromium firefox webkit`. +4. Run `npm run corpus:fetch` once. The command downloads the immutable + questionnaire revision in `tests/corpus/lock.json` and verifies its hashes. + +## Useful commands + +- `npm test` — the fast unit and jsdom integration loop; it deliberately omits + the slower locked-corpus catalog. +- `npm run test:corpus` — corpus integrity, structure, piping, address, and + structural-catalog checks against the pinned questionnaire revision. +- `npm run test:coverage` — the complete Vitest suite, including corpus checks, + with pragmatic aggregate coverage thresholds. +- `npm run test:e2e:chromium` — the complete curated Chromium suite, including + startup and renderer/full-list checks for each locked production survey. +- `npm run test:e2e:cross-browser` — representative canonical, accessibility, + and authoring checks in Firefox and WebKit; the full authoring suite remains + in Chromium. +- `npm run test:e2e:responsive` — the phone and tablet Chromium contracts. +- `npm run test:e2e:windows` — the Windows-user-agent accessibility branch. +- `npm run test:known-defects` — visible expected failures for confirmed + pre-existing defects. +- `npm run test:pr` — the complete local equivalent of the required CI lanes. +- `npm run corpus:catalog:verify` — regenerate the real parser denominator in + memory and fail if it differs from the reviewed structural catalog. +- `npm run corpus:catalog:update` — intentionally update that catalog for + review after a locked corpus or parser change. +- `npm run harness:start` — serve the participant and authoring harnesses for + manual inspection. + +## Scope + +The suite protects parsing, rendering, delegated events, validation, +conditions, queues and loops, back/resume state, host storage and async errors, +authoring, keyboard/focus behavior, representative responsive layouts, and +full-list conversion of all locked production files. It does not implement a +second Quest navigation engine or attempt to enumerate every theoretical +response combination. + +Each ordinary participant render uses a fresh page because Quest retains some +module-level state. All runtime assets are served locally, and unexpected +external requests fail the test. + +The embedded-event tests prove that ordinary host capture and bubble observers +coexist with Quest's delegated listeners. This standalone repository cannot +prove that the current Connect PWA never calls `preventDefault()` or +`stopImmediatePropagation()` first; that requires one focused integration test +in the PWA when the accessibility investigation resumes. + +See `docs/accessibilityManualTest.md` for the VoiceOver and JAWS +acceptance protocol. Automated browser tests characterize intended native +keyboard behavior but do not claim to run either screen reader. diff --git a/tests/config/moduleResolution.js b/tests/config/moduleResolution.js new file mode 100644 index 0000000..4ea490d --- /dev/null +++ b/tests/config/moduleResolution.js @@ -0,0 +1,19 @@ +import { createRequire } from 'node:module'; + +export const MATHJS_CDN_SPECIFIER = 'https://cdn.jsdelivr.net/npm/mathjs@13.0.3/+esm'; + +const require = createRequire(import.meta.url); +const localMathJsEntry = require.resolve('mathjs'); + +/** + * Quest ships as unbundled browser modules and imports MathJS + * from jsDelivr. Tests resolve that exact production specifier to the pinned + * local package so CI is deterministic and can run without outbound access. + */ +export const questDependencyResolver = { + name: 'quest-test-dependency-resolver', + enforce: 'pre', + resolveId(source) { + return source === MATHJS_CDN_SPECIFIER ? localMathJsEntry : null; + }, +}; diff --git a/tests/corpus/README.md b/tests/corpus/README.md new file mode 100644 index 0000000..72c1632 --- /dev/null +++ b/tests/corpus/README.md @@ -0,0 +1,48 @@ +# Locked questionnaire corpus + +`lock.json` pins the 29 production questionnaire files used by the test suite, +including the extensionless Diet Screener. Normal test runs never use mutable +`main`. + +Run: + +```sh +npm run corpus:fetch +npm run corpus:verify +npm run corpus:catalog:verify +``` + +Verified files are stored under the ignored `.cache/questionnaire/` +directory. Chromium opens every locked survey in fresh Connect-shaped pages +twice: once as a participant startup smoke test and once in renderer/full-list +mode. Full-list mode must convert and append every entry produced by the real +`QuestionProcessor`, in order, without unexpected console, network, or +`errorLogger` failures. + +`structuralCatalog.json` is the reviewable denominator produced through the +same full-list parser boundary. For each survey it records: + +- marker and loop-expanded runtime counts +- ordered runtime question IDs +- response-control families +- transition targets, trigger values, and resolution classes +- condition expressions and site counts +- grid rows, loop boundaries, async hooks, and unresolved targets + +The lock's `sourceQuestionCount` field counts question markers. +That is not always the number of runtime forms: grid row markers are folded +into grid forms, while loops are expanded to as many as 25 iterations. The +catalog uses the clearer name `authoredMarkerCount` and separately reports the +actual parser-produced form count. + +Regenerate the catalog only when a reviewed questionnaire lock or Quest parser +change intentionally changes its structure: + +```sh +npm run corpus:catalog:update +git diff -- tests/corpus/structuralCatalog.json +``` + +Deeper behavior is covered with focused fixtures. This catalog describes parser output. +It does not yet claim that every node is reachable, evaluate both sides of every condition, +or generate completed participant paths. diff --git a/tests/corpus/corpusIntegrity.spec.js b/tests/corpus/corpusIntegrity.spec.js new file mode 100644 index 0000000..e100bb5 --- /dev/null +++ b/tests/corpus/corpusIntegrity.spec.js @@ -0,0 +1,142 @@ +import { mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises'; +import os from 'node:os'; +import path from 'node:path'; + +import { afterEach, describe, expect, it } from 'vitest'; + +import { + CorpusVerificationError, + analyzeQuestionnaireText, + gitBlobShaBuffer, + loadCorpusLock, + sha256Buffer, + validateCorpusLock, + verifyCorpus, +} from './scripts/lib/corpus.mjs'; + +const temporaryDirectories = []; + +afterEach(async () => { + await Promise.all(temporaryDirectories.splice(0).map((directory) => ( + rm(directory, { recursive: true, force: true }) + ))); +}); + +function lockedFile({ module, locale, productionPath, text }) { + const buffer = Buffer.from(text); + const analysis = analyzeQuestionnaireText(text); + return { + module, + locale, + language: locale, + path: productionPath, + questName: analysis.questName, + version: analysis.version, + sourceQuestionCount: analysis.questionIds.length, + sha256: sha256Buffer(buffer), + gitBlobSha: gitBlobShaBuffer(buffer), + }; +} + +async function writeFixture(root, repositoryPath, content) { + const filePath = path.join(root, ...repositoryPath.split('/')); + await mkdir(path.dirname(filePath), { recursive: true }); + await writeFile(filePath, content); +} + +describe('questionnaire corpus lock', () => { + it('pins the complete audited production inventory, including extensionless Diet Screener', async () => { + const lock = await loadCorpusLock(); + expect(lock.commit).toBe('7ae99a22af325cf0e14be047a7636462db9bfd50'); + expect(lock.files).toHaveLength(29); + expect(new Set(lock.files.map((entry) => entry.module))).toHaveProperty('size', 15); + expect(lock.files.filter((entry) => entry.locale === 'en')).toHaveLength(15); + expect(lock.files.filter((entry) => entry.locale === 'es')).toHaveLength(14); + expect(lock.files.every((entry) => entry.language === entry.locale)).toBe(true); + expect(lock.files.some((entry) => entry.path === 'prod/moduleDietScreener')).toBe(true); + expect(lock.files.every((entry) => /^[0-9a-f]{64}$/.test(entry.sha256))).toBe(true); + }); + + it('requires the literal language field to match locale', async () => { + const lock = await loadCorpusLock(); + const missingLanguage = structuredClone(lock); + delete missingLanguage.files[0].language; + expect(() => validateCorpusLock(missingLanguage)).toThrow(/language must be en or es/); + + const mismatchedLanguage = structuredClone(lock); + mismatchedLanguage.files[0].language = 'es'; + expect(() => validateCorpusLock(mismatchedLanguage)).toThrow(/language must match locale/); + }); + + it('declares language as required in the lock JSON schema', async () => { + const schema = JSON.parse(await readFile( + path.resolve(import.meta.dirname, 'schemas/lock.schema.json'), + 'utf8', + )); + expect(schema.properties.files.items.required).toContain('language'); + expect(schema.properties.files.items.properties.language.enum).toEqual(['en', 'es']); + }); + + it('strips authored comments before analyzing question IDs', () => { + const analysis = analyzeQuestionnaireText([ + '//{"version":"1.0"}', + '{"name":"D_123"}', + '// [COMMENTED?] ignored', + '/* [BLOCKED?] ignored */', + '[QUESTION?] Prompt', + '[END,end] Done', + ].join('\n')); + + expect(analysis.questName).toBe('D_123'); + expect(analysis.version).toBe('1.0'); + expect(analysis.questionIds).toEqual(['QUESTION', 'END']); + expect(analysis.endCount).toBe(1); + }); +}); + +describe('corpus verification', () => { + it('checks production hashes, metadata, and language question-ID parity', async () => { + const root = await mkdtemp(path.join(os.tmpdir(), 'quest-corpus-test-')); + temporaryDirectories.push(root); + const english = '//{"version":"1.0"}\n{"name":"D_123"}\n[QUESTION?] English\n[END,end] Done\n'; + const spanish = '//{"version":"1.0"}\n{"name":"D_123"}\n[QUESTION?] Español\n[END,end] Fin\n'; + const files = [ + lockedFile({ + module: 'moduleTest', locale: 'en', productionPath: 'prod/moduleTest.txt', + text: english, + }), + lockedFile({ + module: 'moduleTest', locale: 'es', productionPath: 'prod/moduleTestSpanish.txt', + text: spanish, + }), + ]; + const lock = validateCorpusLock({ + schemaVersion: 1, + repository: 'example/questionnaire', + repositoryUrl: 'https://github.com/example/questionnaire.git', + defaultBranch: 'main', + commit: 'a'.repeat(40), + cacheRoot: '.cache/questionnaire', + sourceDirectory: 'prod', + environment: 'prod', + expectedFileCount: 2, + expectedModuleCount: 1, + expectedLanguageCounts: { en: 1, es: 1 }, + questionIdParityExceptions: [], + files, + }); + + await writeFixture(root, files[0].path, english); + await writeFixture(root, files[1].path, spanish); + + await expect(verifyCorpus({ lock, cacheDir: root })).resolves.toMatchObject({ + files: 2, + modules: 1, + sourceQuestionCount: 4, + }); + + await writeFile(path.join(root, files[0].path), `${english}tampered`); + await expect(verifyCorpus({ lock, cacheDir: root })).rejects.toBeInstanceOf(CorpusVerificationError); + await expect(verifyCorpus({ lock, cacheDir: root })).rejects.toThrow(/SHA-256 mismatch/); + }); +}); diff --git a/tests/corpus/hostPersonas.json b/tests/corpus/hostPersonas.json new file mode 100644 index 0000000..ddc8323 --- /dev/null +++ b/tests/corpus/hostPersonas.json @@ -0,0 +1,162 @@ +{ + "schemaVersion": 1, + "personas": [ + { + "id": "external-values-missing", + "description": "Exercises does-not-exist and fallback behavior with no cross-survey results.", + "previousResults": {}, + "userProfile": { + "D_644459734": "2024-06-15", + "age": "45", + "yob": "1979", + "firstName": "Test Participant" + }, + "asyncOutcome": "success" + }, + { + "id": "external-branch-primary", + "description": "Uses the primary constants referenced by current production branch conditions.", + "previousResults": { + "D_407056417": "536341288", + "D_613744428": "353358909", + "D_750420077": "578416151", + "D_784967158": "551525967" + }, + "userProfile": { + "D_644459734": "2024-06-15", + "age": "45", + "yob": "1979", + "firstName": "Test Participant" + }, + "asyncOutcome": "success" + }, + { + "id": "external-branch-alternate", + "description": "Uses alternate constants referenced by current production branch conditions.", + "previousResults": { + "D_407056417": "654207589", + "D_613744428": "104430631", + "D_750420077": "434651539", + "D_784967158": "738284740" + }, + "userProfile": { + "D_644459734": "2024-06-15", + "age": "45", + "yob": "1979", + "firstName": "Test Participant" + }, + "asyncOutcome": "success" + }, + { + "id": "async-empty", + "description": "Exercises an async host callback that resolves without usable response options.", + "previousResults": {}, + "userProfile": { + "D_644459734": "2024-06-15", + "age": "45", + "yob": "1979", + "firstName": "Test Participant" + }, + "asyncOutcome": "empty" + }, + { + "id": "async-error", + "description": "Exercises an async host callback rejection without using live services.", + "previousResults": {}, + "userProfile": { + "D_644459734": "2024-06-15", + "age": "45", + "yob": "1979", + "firstName": "Test Participant" + }, + "asyncOutcome": "rejection" + }, + { + "id": "async-delayed", + "description": "Exercises deterministic delayed completion for every supported async host callback.", + "previousResults": {}, + "userProfile": { + "D_644459734": "2024-06-15", + "age": "45", + "yob": "1979", + "firstName": "Test Participant" + }, + "asyncOutcome": "delayed" + } + ], + "asyncHooks": { + "module1:D_761310265": { + "module": "module1", + "questionId": "D_761310265", + "markupKey": "[D_761310265?]", + "function": "soccer", + "args": ["D_627122657", "D_796828094"], + "fixtureResult": "soccer" + }, + "module1:D_279637054": { + "module": "module1", + "questionId": "D_279637054", + "markupKey": "[D_279637054?]", + "function": "soccer", + "args": ["D_118061122", "D_518387017"], + "fixtureResult": "soccer" + }, + "moduleMenstrual:END": { + "module": "moduleMenstrual", + "questionId": "END", + "markupKey": "[END]", + "function": "resetMenstrualCycle", + "args": ["D_951357171"], + "fixtureResult": "resetMenstrualCycle" + }, + "moduleMouthwash:END": { + "module": "moduleMouthwash", + "questionId": "END", + "markupKey": "[END]", + "function": "resetMouthwash", + "args": ["D_667908442"], + "fixtureResult": "resetMouthwash" + } + }, + "asyncFixtures": { + "success": { + "outcomes": [{ "kind": "resolve" }], + "results": { + "soccer": [ + { + "code": "TEST-SOC-0", + "title": "Test occupation result" + } + ], + "resetMenstrualCycle": { "completed": true }, + "resetMouthwash": { "completed": true } + } + }, + "empty": { + "outcomes": [{ "kind": "resolve", "value": null }], + "results": { + "soccer": [], + "resetMenstrualCycle": null, + "resetMouthwash": null + } + }, + "rejection": { + "outcomes": [{ "kind": "reject", "message": "Deterministic host callback failure" }], + "results": {} + }, + "delayed": { + "delayMs": 75, + "outcomes": [{ "kind": "resolve", "delayMs": 75 }], + "results": { + "soccer": [ + { + "code": "TEST-SOC-DELAYED", + "title": "Delayed occupation result" + } + ], + "resetMenstrualCycle": { "completed": true }, + "resetMouthwash": { "completed": true } + } + } + } +} diff --git a/tests/corpus/lock.json b/tests/corpus/lock.json new file mode 100644 index 0000000..46db5a4 --- /dev/null +++ b/tests/corpus/lock.json @@ -0,0 +1,361 @@ +{ + "$schema": "./schemas/lock.schema.json", + "schemaVersion": 1, + "repository": "episphere/questionnaire", + "repositoryUrl": "https://github.com/episphere/questionnaire.git", + "defaultBranch": "main", + "commit": "7ae99a22af325cf0e14be047a7636462db9bfd50", + "cacheRoot": ".cache/questionnaire", + "sourceDirectory": "prod", + "environment": "prod", + "expectedFileCount": 29, + "expectedModuleCount": 15, + "expectedLanguageCounts": { + "en": 15, + "es": 14 + }, + "questionIdParityExceptions": [ + { + "module": "module1", + "onlyIn": "en", + "ids": [ + "D_927516732" + ] + }, + { + "module": "module2", + "onlyIn": "es", + "ids": [ + "D_186488870" + ] + }, + { + "module": "moduleBiospecimen", + "onlyIn": "es", + "ids": [ + "SRVMTW_MODULEINTRO_V1R0" + ] + } + ], + "files": [ + { + "module": "module1", + "locale": "en", + "language": "en", + "path": "prod/module1.txt", + "questName": "D_726699695_V2", + "version": "4.0", + "sourceQuestionCount": 316, + "sha256": "c36e2ceb44808d43538d04f43c336085ec73c05614ad5791fbb6e58582b8e107", + "gitBlobSha": "862e5a2e53acc7b40774665445626b0961090443" + }, + { + "module": "module1", + "locale": "es", + "language": "es", + "path": "prod/module1Spanish.txt", + "questName": "D_726699695_V2", + "version": "4.0", + "sourceQuestionCount": 315, + "sha256": "f7a768ede6036e68742ea7d0bea3f0debc3f30aa4ab51774b637a9fbbe9e1d2e", + "gitBlobSha": "af57a0cec8372e876af4db1d9deb11093179fccc" + }, + { + "module": "module2", + "locale": "en", + "language": "en", + "path": "prod/module2.txt", + "questName": "D_745268907_V2", + "version": "2.3", + "sourceQuestionCount": 359, + "sha256": "a7b9dba4edd27d55ccb3830b0b54b8d4fa7003a1d2a9c1c79749aaeeaa4f664f", + "gitBlobSha": "151e62fca9dcc8a20c3759d7f807709c82b956cb" + }, + { + "module": "module2", + "locale": "es", + "language": "es", + "path": "prod/module2Spanish.txt", + "questName": "D_745268907_V2", + "version": "2.3", + "sourceQuestionCount": 360, + "sha256": "c8545d3286b47909c9f9048df73467459cccabbeb7dfe7676756ea9474164bb5", + "gitBlobSha": "e5bdfc6ba6bf90be23d6625770f2fbcd7de482d3" + }, + { + "module": "module3", + "locale": "en", + "language": "en", + "path": "prod/module3.txt", + "questName": "D_965707586", + "version": "1.6", + "sourceQuestionCount": 314, + "sha256": "73f6a1ba8bb0ce4b3c1cb56566b3c46b0d8552ff299be81a57ed6c4d4597ea8f", + "gitBlobSha": "5270dc457bbf49abdb7e443ee18c64056274740d" + }, + { + "module": "module3", + "locale": "es", + "language": "es", + "path": "prod/module3Spanish.txt", + "questName": "D_965707586", + "version": "1.6", + "sourceQuestionCount": 314, + "sha256": "4c78a6b2f3db419e87c7701b938a30c56c87c0c4ae2864d9eeb33e16a207e3b8", + "gitBlobSha": "f148cb40d11fe00311e3a2a5199a06edcdbee4e1" + }, + { + "module": "module4", + "locale": "en", + "language": "en", + "path": "prod/module4.txt", + "questName": "D_716117817", + "version": "2.0", + "sourceQuestionCount": 367, + "sha256": "008faf8420a7a657692c7e04a3615f171c53f675411fd3fd049f329a62124fe4", + "gitBlobSha": "02a954153ae23ec64e4d9b17a64c4241e85c9654" + }, + { + "module": "module4", + "locale": "es", + "language": "es", + "path": "prod/module4Spanish.txt", + "questName": "D_716117817", + "version": "2.0", + "sourceQuestionCount": 367, + "sha256": "c1705fb2632f8c2fda8f22a716fb006eecacde9aa75b153611c4e7f15aec5c3f", + "gitBlobSha": "e13239cd096cef57672ac3a0d5bb94559aa15a4c" + }, + { + "module": "module2024ConnectExperience", + "locale": "en", + "language": "en", + "path": "prod/module2024ConnectExperience.txt", + "questName": "D_506648060", + "version": "1.1", + "sourceQuestionCount": 43, + "sha256": "70f70eb07acec537f634c96b66c29596e68baee11812f367bfc89317cb818fe7", + "gitBlobSha": "ab9dd0d671250abda77e1ddd5d0e51d98f39897d" + }, + { + "module": "module2024ConnectExperience", + "locale": "es", + "language": "es", + "path": "prod/module2024ConnectExperienceSpanish.txt", + "questName": "D_506648060", + "version": "1.1", + "sourceQuestionCount": 43, + "sha256": "1bb9757b35913beca279af01bb99ee9c776684fbf7d056289f71c898e5cfef9f", + "gitBlobSha": "7be966c2ddd98bba5c1def60a245796d48f5bb98" + }, + { + "module": "module2026ROIPreferences", + "locale": "en", + "language": "en", + "path": "prod/module2026ROIPreferences.txt", + "questName": "D_312845734", + "version": "1.0", + "sourceQuestionCount": 16, + "sha256": "bb14766a8d7fd626d2234254db78c1c7e84b0503f4734ddafa31239763b160a9", + "gitBlobSha": "57f35700286c391850a2ec359870aa702e8ad808" + }, + { + "module": "module2026ROIPreferences", + "locale": "es", + "language": "es", + "path": "prod/module2026ROIPreferencesSpanish.txt", + "questName": "D_312845734", + "version": "1.0", + "sourceQuestionCount": 16, + "sha256": "c31cf93e57d0c26fb630b940d906cce1f42440e434dea4049ca46859a8423227", + "gitBlobSha": "ba7be12487f90e1aa862d4f18870b8b8c45e0dd7" + }, + { + "module": "moduleBiospecimen", + "locale": "en", + "language": "en", + "path": "prod/moduleBiospecimen.txt", + "questName": "D_299215535", + "version": "1.4", + "sourceQuestionCount": 52, + "sha256": "3511079715fecaf0498d2a3f197f3cce400a9a4674af0947ff740b68ddfb5d22", + "gitBlobSha": "420ac712f7f4f2307ac8d12494b8ff96537ae68a" + }, + { + "module": "moduleBiospecimen", + "locale": "es", + "language": "es", + "path": "prod/moduleBiospecimenSpanish.txt", + "questName": "D_299215535", + "version": "1.4", + "sourceQuestionCount": 53, + "sha256": "16f3ae9976bc65506da60281fe17e27f6701109e6a5b67d9b65e044805259192", + "gitBlobSha": "ed33370e87f565bf25e31a2e36583f7701f1d504" + }, + { + "module": "moduleCOVID19", + "locale": "en", + "language": "en", + "path": "prod/moduleCOVID19.txt", + "questName": "D_793330426", + "version": "1.3", + "sourceQuestionCount": 97, + "sha256": "5d3dfa29799998557fd85d168869f9b1f122d3d957f443a7a423ec12304c6426", + "gitBlobSha": "114e83e88cacad5070bc75a54d5ec7eb319da4a2" + }, + { + "module": "moduleCOVID19", + "locale": "es", + "language": "es", + "path": "prod/moduleCOVID19Spanish.txt", + "questName": "D_793330426", + "version": "1.3", + "sourceQuestionCount": 97, + "sha256": "3aec9221ab9dedd091d46b6eee3de1085e49f3a7c93e98e4ee8b47da969b9c43", + "gitBlobSha": "3d9ad926b9075409c920fb6827194beae69a9b53" + }, + { + "module": "moduleCancerScreeningHistory", + "locale": "en", + "language": "en", + "path": "prod/moduleCancerScreeningHistory.txt", + "questName": "D_369168474", + "version": "1.2", + "sourceQuestionCount": 144, + "sha256": "65207c189b9b62836afc43cb80c12b416612b3d246a71d257804e0924c7817b2", + "gitBlobSha": "60befaf4c26ff151308cea9b0149d7cba353c237" + }, + { + "module": "moduleCancerScreeningHistory", + "locale": "es", + "language": "es", + "path": "prod/moduleCancerScreeningHistorySpanish.txt", + "questName": "D_369168474", + "version": "1.2", + "sourceQuestionCount": 144, + "sha256": "dd93c2e963d9c0f2eb202667a45748ca576aefed4157f315a6e8ddef95eb7c38", + "gitBlobSha": "6bf4cc485646af1d3caeb7d028f849af9b27c4b5" + }, + { + "module": "moduleClinicalBloodUrine", + "locale": "en", + "language": "en", + "path": "prod/moduleClinicalBloodUrine.txt", + "questName": "D_826163434", + "version": "1.4", + "sourceQuestionCount": 21, + "sha256": "da2014adad00d371c0044fdfe1095af570e253c293ea3e88023045d51762a91e", + "gitBlobSha": "6787fad926c177db284bb7a1a4919c9277ab2ea8" + }, + { + "module": "moduleClinicalBloodUrine", + "locale": "es", + "language": "es", + "path": "prod/moduleClinicalBloodUrineSpanish.txt", + "questName": "D_826163434", + "version": "1.4", + "sourceQuestionCount": 21, + "sha256": "2898151d137c3f33ecf857b4f82561d6c42ae0c6c1947d47a1317ba24c9de987", + "gitBlobSha": "c6b36385c2f751a80d032db0d1ae494420b76f70" + }, + { + "module": "moduleDietScreener", + "locale": "en", + "language": "en", + "path": "prod/moduleDietScreener", + "questName": "D_515124081", + "version": "1.0", + "sourceQuestionCount": 3, + "sha256": "bfe990625139d13c6125245a441c8fcb666bcbac905e577ef374df8f708f5dca", + "gitBlobSha": "8cba1d923c79f508c7071946b35f4800e71cfb2d" + }, + { + "module": "moduleDietScreener", + "locale": "es", + "language": "es", + "path": "prod/moduleDietScreenerSpanish.txt", + "questName": "D_515124081", + "version": "1.0", + "sourceQuestionCount": 3, + "sha256": "40a21887c151720e2ce65450154e0ab8b21f5d94c6324de3f8417b35e2d5564a", + "gitBlobSha": "b0ae2f197d3f779ac7b77c8391adbdc8c8f46d59" + }, + { + "module": "moduleMenstrual", + "locale": "en", + "language": "en", + "path": "prod/moduleMenstrual.txt", + "questName": "D_912367929", + "version": "1.1", + "sourceQuestionCount": 5, + "sha256": "13de3a43aed31befdda5be4c805a3b885e36df9275f742a19ca931e360e159b2", + "gitBlobSha": "ccb21cd54e37537f29cd233f06a068fea80a21c6" + }, + { + "module": "moduleMenstrual", + "locale": "es", + "language": "es", + "path": "prod/moduleMenstrualSpanish.txt", + "questName": "D_912367929", + "version": "1.1", + "sourceQuestionCount": 5, + "sha256": "6424161524cbfd2ba9884e0db0106f1dcb37132473125de2abeeae9c8ae6cc8f", + "gitBlobSha": "90938931c3073074aabc5ca960f490c0065a5184" + }, + { + "module": "moduleMouthwash", + "locale": "en", + "language": "en", + "path": "prod/moduleMouthwash.txt", + "questName": "D_390351864", + "version": "1.1", + "sourceQuestionCount": 34, + "sha256": "5d352f4bebe7c0a16cb835c24b44c93c7ce00af4a9b5c8a345ce3662036c70fd", + "gitBlobSha": "d5927538e61b6865c08598cc8e64bceca4de8435" + }, + { + "module": "moduleMouthwash", + "locale": "es", + "language": "es", + "path": "prod/moduleMouthwashSpanish.txt", + "questName": "D_390351864", + "version": "1.1", + "sourceQuestionCount": 34, + "sha256": "e7516c4836ad310bc8be26f7c96cb9e1f23ee0bcbc529677e34db332fd76637a", + "gitBlobSha": "d5cb40d2b4cb94f3f976e0279f975bc4b53e5fc8" + }, + { + "module": "moduleQoL", + "locale": "en", + "language": "en", + "path": "prod/moduleQoL.txt", + "questName": "D_601305072", + "version": "1.0", + "sourceQuestionCount": 11, + "sha256": "6e1e8c3af357783996395be2a6b6907cf02f936c5cb8275717477f3e05c51b7e", + "gitBlobSha": "53866c298eeaf084f911960f31ff9ff0b89f449a" + }, + { + "module": "moduleQoL", + "locale": "es", + "language": "es", + "path": "prod/moduleQoLSpanish.txt", + "questName": "D_601305072", + "version": "1.0", + "sourceQuestionCount": 11, + "sha256": "c068aab47cb94768399a635e7e98a48078e29e36391db55987ce33701edbf4a1", + "gitBlobSha": "5f66e5c0be990b5946bec022529cafe21802cc53" + }, + { + "module": "ssnModule", + "locale": "en", + "language": "en", + "path": "prod/ssnModule.txt", + "questName": "D_166676176", + "version": "1.0", + "sourceQuestionCount": 3, + "sha256": "400e5fb271c1d434c6c397f370b32fced6d16ea2a2f589720ac220ba82bbeb1b", + "gitBlobSha": "ae65c7a998fc636da237cb8a65f81849cf1ac57a" + } + ] +} diff --git a/tests/corpus/module4AddressStructure.spec.js b/tests/corpus/module4AddressStructure.spec.js new file mode 100644 index 0000000..74fe170 --- /dev/null +++ b/tests/corpus/module4AddressStructure.spec.js @@ -0,0 +1,200 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { describe, expect, it, vi } from 'vitest'; + +import { corpusCacheDirectory, loadCorpusLock } from './scripts/lib/corpus.mjs'; + +const QUESTION_MARKER = /^\[([A-Z_][A-Z0-9_#]*)(?:[?!])?(?:,[^\]]*)?\]/gm; +const INPUT_ID = /\|__\|id=(D_\d+)/g; +const QUOTED_ID = /"(D_\d+)"/g; +const PIPED_ID = /\{\$(D_\d+)\}/g; +const EXPECTED_INTERSECTION_COUNT = 26; + +function unique(values) { + return [...new Set(values)]; +} + +function idsIn(text, pattern) { + return [...text.matchAll(pattern)].map(([, id]) => id); +} + +function questionBlocks(markdown) { + const markers = [...markdown.matchAll(QUESTION_MARKER)]; + return markers.map((marker, index) => ({ + id: marker[1], + source: markdown.slice(marker.index, markers[index + 1]?.index), + header: markdown.slice(marker.index, markdown.indexOf('\n', marker.index)), + })); +} + +function fieldId(source, labels) { + const labelPattern = labels.join('|'); + const match = source.match(new RegExp(`(?:${labelPattern})\\s*\\|__\\|id=(D_\\d+)`, 'i')); + return match?.[1] ?? null; +} + +function summaryDisplayArms(source) { + const armStarts = [...source.matchAll(/\|displayif=([^|]+)\|/g)]; + return armStarts.flatMap((armStart, index) => { + const addressCondition = armStart[1].match(/^(noneExist|someExist)\(([^)]*)\)/); + if (!addressCondition) return []; + const contentStart = armStart.index + armStart[0].length; + const nextArmStart = armStarts[index + 1]?.index ?? source.length; + const lineEnd = source.indexOf('\n', contentStart); + const contentBoundary = Math.min(nextArmStart, lineEnd === -1 ? source.length : lineEnd); + const authoredContent = source.slice(contentStart, contentBoundary); + const closingPipe = authoredContent.lastIndexOf('|'); + const content = closingPipe === -1 ? authoredContent : authoredContent.slice(0, closingPipe); + return [{ + kind: addressCondition[1], + conditionIds: idsIn(addressCondition[2], QUOTED_ID), + content, + contentIds: idsIn(content, PIPED_ID), + }]; + }); +} + +function getAddressFamily(blocks, intersectionIndex) { + const primary = blocks[intersectionIndex - 2]; + const backup = blocks[intersectionIndex - 1]; + const intersection = blocks[intersectionIndex]; + const summary = blocks[intersectionIndex + 1]; + const primaryInputIds = idsIn(primary.source, INPUT_ID); + const backupInputIds = idsIn(backup.source, INPUT_ID); + const crossStreetIds = idsIn(intersection.source, INPUT_ID); + const conditionIds = idsIn(intersection.header, QUOTED_ID); + + return { + primary, + backup, + intersection, + summary, + primaryInputIds, + backupInputIds, + crossStreetIds, + conditionIds, + streetNumber: fieldId(primary.source, ['Street number', 'Número de la calle']), + streetName: fieldId(primary.source, ['Full Street name', 'Nombre completo de la calle']), + localityIds: [ + fieldId(primary.source, ['City', 'Ciudad']), + fieldId(primary.source, ['State/Province', 'Estado o provincia']), + fieldId(primary.source, ['Zip code', 'Código postal']), + fieldId(primary.source, ['Country', 'País']), + ], + }; +} + +async function readModule4(locale) { + const lock = await loadCorpusLock(); + const cacheDirectory = corpusCacheDirectory(lock); + const entry = lock.files.find((file) => file.module === 'module4' && file.locale === locale); + const filePath = resolve(cacheDirectory, entry.path); + return existsSync(filePath) ? readFileSync(filePath, 'utf8') : null; +} + +const english = await readModule4('en'); +const spanish = await readModule4('es'); + +describe.skipIf(!english || !spanish)('locked Module 4 address-family structure @corpus', () => { + + it('characterizes the three duplicated displayif tokens as a math assignment that retains the intended fallback predicate', async () => { + const blocks = questionBlocks(english); + const duplicated = blocks.filter(({ header }) => header.includes('displayif=displayif=')); + const spanishDuplicated = questionBlocks(spanish).filter(({ header }) => header.includes('displayif=displayif=')); + expect(duplicated.map(({ id }) => id)).toEqual(['D_398762737', 'D_205492848', 'D_763354979']); + expect(spanishDuplicated.map(({ id }) => id)).toEqual(duplicated.map(({ id }) => id)); + + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = {}; + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + stateModule.getStateManager().loadInitialSurveyState({ D_288498031: 'Lakeview' }); + const { initializeCustomMathJSFunctions } = await import('../../customMathJSImplementation.js'); + initializeCustomMathJSFunctions(); + const { evaluateCondition } = await import('../../evaluateConditions.js'); + + const condition = duplicated[0].header.match(/displayif=(.*?)\]/)?.[1]; + expect(condition).toBe('displayif=noneExist("D_985267931","D_111275683") and someExist("D_288498031","D_195845897","D_936129960","D_924583345","D_536516743","D_283900560","D_467947502","D_368486703")'); + expect(evaluateCondition(condition)).toBe(true); + stateModule.getStateManager().loadInitialSurveyState({}); + expect(evaluateCondition(condition)).toBe(false); + }); + + it('keeps every primary, backup, cross-street, and summary family internally consistent in English and Spanish', () => { + const byLocale = new Map([ + ['en', questionBlocks(english)], + ['es', questionBlocks(spanish)], + ]); + const familiesByLocale = new Map(); + + for (const [locale, blocks] of byLocale) { + const intersectionIndexes = blocks.flatMap((block, index) => ( + /cross streets|intersección/i.test(block.source) ? [index] : [] + )); + expect(intersectionIndexes, `${locale} intersection-family count`).toHaveLength(EXPECTED_INTERSECTION_COUNT); + + const families = intersectionIndexes.map((index) => getAddressFamily(blocks, index)); + familiesByLocale.set(locale, families); + + for (const family of families) { + expect(family.primaryInputIds.length, `${locale} ${family.primary.id} primary field count`).toBeGreaterThanOrEqual(7); + expect(unique(family.primaryInputIds), `${locale} ${family.primary.id} primary IDs`).toEqual(family.primaryInputIds); + expect(family.backupInputIds, `${locale} ${family.backup.id} backup fields`).toHaveLength(4); + expect(family.crossStreetIds, `${locale} ${family.intersection.id} cross streets`).toHaveLength(2); + expect(family.streetNumber, `${locale} ${family.primary.id} street number`).toBeTruthy(); + expect(family.streetName, `${locale} ${family.primary.id} street name`).toBeTruthy(); + expect(family.localityIds, `${locale} ${family.primary.id} locality fields`).not.toContain(null); + + const expectedConditionIds = unique([ + family.streetNumber, + family.streetName, + ...family.backupInputIds, + ...family.localityIds, + ]).sort(); + expect(unique(family.conditionIds).sort(), `${locale} ${family.intersection.id} fallback predicate IDs`) + .toEqual(expectedConditionIds); + expect(family.intersection.header, `${locale} ${family.intersection.id} no-street predicate`) + .toContain(`noneExist("${family.streetNumber}","${family.streetName}")`); + expect(family.intersection.header, `${locale} ${family.intersection.id} locality predicate`) + .toContain('someExist('); + + const expectedSummaryIds = unique([ + ...family.primaryInputIds.slice(family.primaryInputIds.indexOf(family.streetNumber)), + ...family.backupInputIds, + ...family.crossStreetIds, + ]); + const summaryArms = summaryDisplayArms(family.summary.source); + expect(summaryArms, `${locale} ${family.summary.id} display arms`).toHaveLength(2); + const emptyArm = summaryArms.find(({ kind }) => kind === 'noneExist'); + const populatedArm = summaryArms.find(({ kind }) => kind === 'someExist'); + expect(emptyArm, `${locale} ${family.summary.id} empty arm`).toBeTruthy(); + expect(populatedArm, `${locale} ${family.summary.id} populated arm`).toBeTruthy(); + expect(unique(emptyArm.conditionIds).sort(), `${locale} ${family.summary.id} empty condition IDs`) + .toEqual(unique(populatedArm.conditionIds).sort()); + expect(emptyArm.contentIds, `${locale} ${family.summary.id} empty arm must not pipe address fields`) + .toEqual([]); + expect(unique(populatedArm.contentIds).sort(), `${locale} ${family.summary.id} populated address fields`) + .toEqual([...expectedSummaryIds].sort()); + } + } + + const englishFamilies = familiesByLocale.get('en'); + const spanishFamilies = familiesByLocale.get('es'); + expect(englishFamilies.map((family) => family.intersection.id)).toEqual( + spanishFamilies.map((family) => family.intersection.id), + ); + for (let index = 0; index < englishFamilies.length; index += 1) { + const englishFamily = englishFamilies[index]; + const spanishFamily = spanishFamilies[index]; + expect(spanishFamily.primary.id).toBe(englishFamily.primary.id); + expect(spanishFamily.backup.id).toBe(englishFamily.backup.id); + expect(spanishFamily.summary.id).toBe(englishFamily.summary.id); + expect(spanishFamily.primaryInputIds).toEqual(englishFamily.primaryInputIds); + expect(spanishFamily.backupInputIds).toEqual(englishFamily.backupInputIds); + expect(spanishFamily.crossStreetIds).toEqual(englishFamily.crossStreetIds); + expect(unique(spanishFamily.conditionIds).sort()).toEqual(unique(englishFamily.conditionIds).sort()); + } + }); +}); diff --git a/tests/corpus/responsePipingStructure.spec.js b/tests/corpus/responsePipingStructure.spec.js new file mode 100644 index 0000000..9801402 --- /dev/null +++ b/tests/corpus/responsePipingStructure.spec.js @@ -0,0 +1,283 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { describe, expect, it, vi } from 'vitest'; + +import en from '../../i18n/en.js'; +import es from '../../i18n/es.js'; +import { QuestionProcessor } from '../../questionProcessor.js'; +import { moduleParams } from '../../questionnaire.js'; +import { initializeStateManager, getStateManager } from '../../stateManager.js'; +import { initializeCustomMathJSFunctions } from '../../customMathJSImplementation.js'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; +import { corpusCacheDirectory, loadCorpusLock } from './scripts/lib/corpus.mjs'; + +const DIRECT_PIPE = /^([A-Za-z_]\w*(?:\.\w+)?)$/; +const TOKEN = /\{([$#])([^}]+)\}/g; +const QUESTION_MARKER = /^\[([A-Z_][A-Z0-9_#]*)(?:[?!])?(?:\|[^\]]+\|)?(?:,[^\]]*)?\]/gm; +const LOOP_SUFFIX = /_\d+_\d+$/; + +const EXPECTED_DIRECT_PIPES = { + 'module1/en': 71, + 'module1/es': 71, + 'module2/en': 19, + 'module2/es': 19, + 'module3/en': 171, + 'module3/es': 171, + 'module4/en': 5048, + 'module4/es': 5049, + 'module2024ConnectExperience/en': 3, + 'module2024ConnectExperience/es': 3, + 'moduleCOVID19/en': 30, + 'moduleCOVID19/es': 30, + 'moduleCancerScreeningHistory/en': 1, + 'moduleCancerScreeningHistory/es': 1, +}; + +const EXPECTED_TOKEN_COUNTS = { + direct: 10687, + user: 162, + expression: 74, + hashExpression: 89, + other: 0, +}; + +const EXPECTED_DISPLAY_LISTS = [ + 'module1/en/SIBSUM', + 'module1/en/CHILDSUM', + 'module1/es/SIBSUM', + 'module1/es/CHILDSUM', + 'moduleCOVID19/en/SRVCOV_COVSUMMARY_V1R0', + 'moduleCOVID19/es/SRVCOV_COVSUMMARY_V1R0', +]; + +const EXPECTED_LOCALE_DIFFERENCES = { + module3: { + englishOnly: ['D_349510816<-D_970325871'], + spanishOnly: ['D_349510816<-D_700173707'], + }, + module4: { + englishOnly: [], + spanishOnly: ['D_720221117<-D_814137809'], + }, +}; + +function withoutComments(markdown) { + return markdown.replace(/\/\/.*|\/\*[\s\S]*?\*\//g, ''); +} + +function questionBlocks(markdown) { + const markers = [...markdown.matchAll(QUESTION_MARKER)]; + return markers.map((marker, index) => ({ + id: marker[1], + source: markdown.slice(marker.index, markers[index + 1]?.index ?? markdown.length), + })); +} + +function tokenInventory(markdown) { + const counts = { + direct: 0, + user: 0, + expression: 0, + hashExpression: 0, + other: 0, + }; + + for (const token of markdown.matchAll(TOKEN)) { + const [, prefix, value] = token; + if (prefix === '#') counts.hashExpression += 1; + else if (value.startsWith('u:')) counts.user += 1; + else if (value.startsWith('e:')) counts.expression += 1; + else if (DIRECT_PIPE.test(value)) counts.direct += 1; + else counts.other += 1; + } + + return counts; +} + +function gridRanges(markdown) { + const grid = /\|grid[!?]*\|([^|]+)\|[^|]*\|[^|]*\|[^|]*\|/g; + return [...markdown.matchAll(grid)].flatMap((match) => { + const destination = match[1].match(/\bid=["']?([A-Za-z_]\w*)/i)?.[1]; + return destination ? [{ start: match.index, end: match.index + match[0].length, destination }] : []; + }); +} + +function directPairs(markdown) { + const markers = [...markdown.matchAll(QUESTION_MARKER)]; + const grids = gridRanges(markdown); + return [...markdown.matchAll(TOKEN)].flatMap((token) => { + const [, prefix, source] = token; + if (prefix !== '$' || !DIRECT_PIPE.test(source)) return []; + + const grid = grids.find(({ start, end }) => token.index >= start && token.index < end); + const questionIndex = markers.findLastIndex(({ index }) => index <= token.index); + const destination = grid?.destination ?? markers[questionIndex]?.[1]; + return destination ? [{ destination, source }] : []; + }); +} + +function displayListDestinations(markdown, module, locale) { + return questionBlocks(markdown) + .filter(({ source }) => source.includes('|displayList(')) + .map(({ id }) => `${module}/${locale}/${id}`); +} + +function normaliseLoopId(id) { + return id.replace(LOOP_SUFFIX, ''); +} + +function pipePairKey({ destination, source }) { + return `${normaliseLoopId(destination)}<-${normaliseLoopId(source)}`; +} + +function configureProcessor(locale) { + moduleParams.i18n = locale === 'es' ? es : en; + moduleParams.errorLogger = vi.fn(); + moduleParams.previousResults = {}; + moduleParams.asyncQuestionsMap = {}; + moduleParams.renderFullQuestionList = true; + moduleParams.isRenderer = true; + initializeStateManager(); + initializeCustomMathJSFunctions(); +} + +function directSourcesInText(text) { + return new Set( + [...text.matchAll(TOKEN)] + .flatMap(([, prefix, value]) => (prefix === '$' && DIRECT_PIPE.test(value) ? [normaliseLoopId(value)] : [])), + ); +} + +function gridSourcesInHTML(html) { + return new Set( + [...html.matchAll(/data-gridreplace=([^\s>]+)/g)] + .map(([, source]) => normaliseLoopId(decodeURIComponent(source.replace(/["']/g, '')))) + .filter((source) => DIRECT_PIPE.test(source)), + ); +} + +function parsedPipePairs(markdown, locale, authoredPairs) { + configureProcessor(locale); + const processor = new QuestionProcessor(markdown, { + current_date: new Date('2024-07-15T12:00:00.000Z'), + current_day: 15, + current_month: 7, + current_month_str: 6, + current_year: 2024, + quest_format_date: '2024-7-15', + }, locale === 'es' ? es : en); + getStateManager().setQuestionProcessor(processor); + const parsed = new Set(); + const remaining = new Set(authoredPairs); + for (const [index, question] of processor.questions.entries()) { + const destination = normaliseLoopId(question.questionIDExactSearch); + const questionSources = new Set([ + ...directSourcesInText(question.questText ?? ''), + ...gridSourcesInHTML(question.formElement ?? ''), + ]); + if (![...questionSources].some((source) => remaining.has(`${destination}<-${source}`))) continue; + + const form = processor.processQuestion(index); + form.querySelectorAll('[forid]').forEach((element) => { + parsed.add(pipePairKey({ + destination: form.id, + source: decodeURIComponent(element.getAttribute('forid')), + })); + }); + form.querySelectorAll('[data-gridreplace]').forEach((element) => { + const source = decodeURIComponent(element.dataset.gridreplace); + if (DIRECT_PIPE.test(source)) parsed.add(pipePairKey({ destination: form.id, source })); + }); + parsed.forEach((pair) => remaining.delete(pair)); + if (remaining.size === 0) break; + } + + return parsed; +} + +const lock = await loadCorpusLock(); +const cacheDirectory = corpusCacheDirectory(lock); +const entries = lock.files.map((entry) => ({ + ...entry, + path: resolve(cacheDirectory, entry.path), +})); +const unavailable = entries.filter(({ path }) => !existsSync(path)); + +describe.skipIf(unavailable.length > 0)('locked production response-piping structure @corpus', () => { + it('inventories every direct pipe while keeping profile, computed, and expression tokens separate', () => { + const directCounts = {}; + const totals = { direct: 0, user: 0, expression: 0, hashExpression: 0, other: 0 }; + const displayLists = []; + + for (const entry of entries) { + const markdown = withoutComments(readFileSync(entry.path, 'utf8')); + const inventory = tokenInventory(markdown); + const key = `${entry.module}/${entry.locale}`; + directCounts[key] = inventory.direct; + displayLists.push(...displayListDestinations(markdown, entry.module, entry.locale)); + Object.keys(totals).forEach((name) => { + totals[name] += inventory[name]; + }); + } + + expect(directCounts).toEqual({ + ...Object.fromEntries(entries.map(({ module, locale }) => [`${module}/${locale}`, 0])), + ...EXPECTED_DIRECT_PIPES, + }); + expect(totals).toEqual(EXPECTED_TOKEN_COUNTS); + expect(displayLists).toEqual(EXPECTED_DISPLAY_LISTS); + }); + + it('keeps every authored destination/source pair in its own forid or grid-replacement runtime output', () => { + for (const entry of entries) { + const markdown = withoutComments(readFileSync(entry.path, 'utf8')); + const authoredPairs = new Set(directPairs(markdown).map(pipePairKey)); + if (authoredPairs.size === 0) continue; + const parsedPairs = parsedPipePairs(markdown, entry.locale, authoredPairs); + + expect( + [...authoredPairs].filter((pair) => !parsedPairs.has(pair)), + `${entry.module}/${entry.locale}: every authored destination/source pair must survive in its own runtime form`, + ).toEqual([]); + } + }); + + it('keeps English and Spanish source/destination pairs aligned except for the two audited differences', () => { + const pairsByModule = new Map(); + for (const entry of entries) { + if (!['en', 'es'].includes(entry.locale)) continue; + const markdown = withoutComments(readFileSync(entry.path, 'utf8')); + const pairs = new Set(directPairs(markdown).map(pipePairKey)); + const localePairs = pairsByModule.get(entry.module) ?? new Map(); + localePairs.set(entry.locale, pairs); + pairsByModule.set(entry.module, localePairs); + } + + for (const [module, localePairs] of pairsByModule) { + const english = localePairs.get('en'); + const spanish = localePairs.get('es'); + if (!english || !spanish) continue; + const actual = { + englishOnly: [...english].filter((pair) => !spanish.has(pair)).sort(), + spanishOnly: [...spanish].filter((pair) => !english.has(pair)).sort(), + }; + expect(actual, `${module} EN/ES direct-pipe parity`).toEqual( + EXPECTED_LOCALE_DIFFERENCES[module] ?? { englishOnly: [], spanishOnly: [] }, + ); + } + }); + + it('keeps rendered forid spans and grid replacements available through the participant render boundary', async () => { + const entry = entries.find(({ module, locale }) => module === 'module3' && locale === 'en'); + const quest = await renderFreshQuest({ + markdown: readFileSync(entry.path, 'utf8'), + params: { activate: false, isRenderer: true, lang: 'en' }, + }); + + expect(quest.rendered).toBe(true); + expect(quest.root.querySelectorAll('[forid]').length).toBeGreaterThan(100); + const gridSources = [...quest.root.querySelectorAll('[data-gridreplace]')] + .map((element) => decodeURIComponent(element.dataset.gridreplace)); + expect(gridSources).toEqual(expect.arrayContaining(['D_141874857', 'D_250456537', 'D_480426504'])); + }); +}); diff --git a/tests/corpus/schemas/lock.schema.json b/tests/corpus/schemas/lock.schema.json new file mode 100644 index 0000000..5c36e7d --- /dev/null +++ b/tests/corpus/schemas/lock.schema.json @@ -0,0 +1,106 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://episphere.github.io/quest/tests/corpus/lock.schema.json", + "title": "Quest questionnaire corpus lock", + "type": "object", + "required": [ + "schemaVersion", + "repository", + "repositoryUrl", + "defaultBranch", + "commit", + "cacheRoot", + "sourceDirectory", + "environment", + "expectedFileCount", + "expectedModuleCount", + "expectedLanguageCounts", + "questionIdParityExceptions", + "files" + ], + "properties": { + "$schema": { "type": "string" }, + "schemaVersion": { "const": 1 }, + "repository": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$" }, + "repositoryUrl": { "type": "string", "format": "uri" }, + "defaultBranch": { "type": "string", "minLength": 1 }, + "commit": { "type": "string", "pattern": "^[0-9a-f]{40}$" }, + "cacheRoot": { "type": "string", "minLength": 1 }, + "sourceDirectory": { "const": "prod" }, + "environment": { "const": "prod" }, + "expectedFileCount": { "type": "integer", "minimum": 1 }, + "expectedModuleCount": { "type": "integer", "minimum": 1 }, + "expectedLanguageCounts": { + "type": "object", + "required": ["en", "es"], + "properties": { + "en": { "type": "integer", "minimum": 1 }, + "es": { "type": "integer", "minimum": 0 } + }, + "additionalProperties": false + }, + "questionIdParityExceptions": { + "type": "array", + "items": { + "type": "object", + "required": ["module", "onlyIn", "ids"], + "properties": { + "module": { "type": "string", "minLength": 1 }, + "onlyIn": { "enum": ["en", "es"] }, + "ids": { + "type": "array", + "minItems": 1, + "items": { "type": "string", "minLength": 1 }, + "uniqueItems": true + } + }, + "additionalProperties": false + } + }, + "files": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "module", + "locale", + "language", + "path", + "questName", + "version", + "sourceQuestionCount", + "sha256", + "gitBlobSha" + ], + "properties": { + "module": { "type": "string", "minLength": 1 }, + "locale": { "enum": ["en", "es"] }, + "language": { "enum": ["en", "es"] }, + "path": { "type": "string", "pattern": "^prod/.+" }, + "questName": { "type": "string", "pattern": "^\\w+$" }, + "version": { "type": "string", "minLength": 1 }, + "sourceQuestionCount": { "type": "integer", "minimum": 1 }, + "sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" }, + "gitBlobSha": { "type": "string", "pattern": "^[0-9a-f]{40}$" } + }, + "oneOf": [ + { + "properties": { + "locale": { "const": "en" }, + "language": { "const": "en" } + } + }, + { + "properties": { + "locale": { "const": "es" }, + "language": { "const": "es" } + } + } + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false +} diff --git a/tests/corpus/scripts/fetchCorpus.mjs b/tests/corpus/scripts/fetchCorpus.mjs new file mode 100644 index 0000000..56de066 --- /dev/null +++ b/tests/corpus/scripts/fetchCorpus.mjs @@ -0,0 +1,144 @@ +import { execFile } from 'node:child_process'; +import { promisify } from 'node:util'; +import { copyFile, mkdir, mkdtemp, readFile, rename, rm, writeFile } from 'node:fs/promises'; +import path from 'node:path'; + +import { + corpusCacheDirectory, + getLockedArtifacts, + loadCorpusLock, + resolveCorpusCacheRoot, + sha256Buffer, + gitBlobShaBuffer, + verifyCorpus, +} from './lib/corpus.mjs'; +import { DEFAULT_LOCK_PATH, pathExists } from './lib/artifacts.mjs'; + +const execFileAsync = promisify(execFile); + +function parseArguments(argv) { + const options = { + lockPath: DEFAULT_LOCK_PATH, + cacheRoot: null, + force: false, + }; + + for (let index = 0; index < argv.length; index += 1) { + const argument = argv[index]; + if (argument === '--lock') options.lockPath = path.resolve(argv[++index]); + else if (argument === '--cache-root') options.cacheRoot = path.resolve(argv[++index]); + else if (argument === '--force') options.force = true; + else throw new Error(`Unknown argument: ${argument}`); + } + return options; +} + +function githubHeaders() { + const headers = { + Accept: 'application/vnd.github+json', + 'X-GitHub-Api-Version': '2022-11-28', + 'User-Agent': 'quest-corpus-fetcher', + }; + const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN; + if (token) headers.Authorization = `Bearer ${token}`; + return headers; +} + +async function downloadArchive(lock, archivePath) { + const url = `https://api.github.com/repos/${lock.repository}/tarball/${lock.commit}`; + const response = await fetch(url, { + headers: githubHeaders(), + redirect: 'follow', + }); + + if (!response.ok) { + throw new Error(`Immutable GitHub archive fetch failed with HTTP ${response.status}.`); + } + await writeFile(archivePath, Buffer.from(await response.arrayBuffer())); +} + +async function extractArchive(archivePath, destination) { + await mkdir(destination, { recursive: true }); + try { + await execFileAsync('tar', [ + '-xzf', archivePath, + '-C', destination, + '--strip-components=1', + ]); + } catch (error) { + throw new Error(`Unable to extract the locked questionnaire archive: ${error.stderr || error.message}`); + } +} + +async function copyLockedArtifacts(lock, checkoutRoot, destinationRoot) { + for (const artifact of getLockedArtifacts(lock)) { + const source = path.join(checkoutRoot, ...artifact.path.split('/')); + const buffer = await readFile(source); + const actualSha256 = sha256Buffer(buffer); + const actualGitBlobSha = gitBlobShaBuffer(buffer); + if (actualSha256 !== artifact.sha256 || actualGitBlobSha !== artifact.gitBlobSha) { + throw new Error(`${artifact.path}: archive bytes do not match the locked hashes.`); + } + + const destination = path.join(destinationRoot, ...artifact.path.split('/')); + await mkdir(path.dirname(destination), { recursive: true }); + await copyFile(source, destination); + } +} + +async function installStagedCache(stagedCache, cacheDir, temporaryRoot) { + const previousCache = path.join(temporaryRoot, 'previous-cache'); + const hadExistingCache = await pathExists(cacheDir); + + if (hadExistingCache) await rename(cacheDir, previousCache); + + try { + await rename(stagedCache, cacheDir); + } catch (error) { + if (hadExistingCache && !(await pathExists(cacheDir))) { + await rename(previousCache, cacheDir); + } + throw error; + } +} + +async function main() { + const options = parseArguments(process.argv.slice(2)); + const lock = await loadCorpusLock(options.lockPath); + const cacheRoot = resolveCorpusCacheRoot(lock, options.cacheRoot); + const cacheDir = corpusCacheDirectory(lock, cacheRoot); + + if (await pathExists(cacheDir)) { + if (!options.force) { + const summary = await verifyCorpus({ lock, cacheDir }); + console.log(`Corpus cache already verified at ${cacheDir} (${summary.files} prod files).`); + return; + } + } + + await mkdir(cacheRoot, { recursive: true }); + const temporaryRoot = await mkdtemp(path.join(cacheRoot, `.${lock.commit}.tmp-`)); + const archivePath = path.join(temporaryRoot, 'questionnaire.tar.gz'); + const checkoutRoot = path.join(temporaryRoot, 'checkout'); + const stagedCache = path.join(temporaryRoot, 'cache'); + + try { + await downloadArchive(lock, archivePath); + await extractArchive(archivePath, checkoutRoot); + await mkdir(stagedCache, { recursive: true }); + await copyLockedArtifacts(lock, checkoutRoot, stagedCache); + const summary = await verifyCorpus({ lock, cacheDir: stagedCache }); + await installStagedCache(stagedCache, cacheDir, temporaryRoot); + await rm(temporaryRoot, { recursive: true, force: true }); + console.log(`Fetched and verified ${summary.files} production files at ${lock.commit}.`); + console.log(cacheDir); + } catch (error) { + await rm(temporaryRoot, { recursive: true, force: true }); + throw error; + } +} + +main().catch((error) => { + console.error(error.cause?.message ?? error.message); + process.exitCode = 1; +}); diff --git a/tests/corpus/scripts/lib/artifacts.mjs b/tests/corpus/scripts/lib/artifacts.mjs new file mode 100644 index 0000000..13dad24 --- /dev/null +++ b/tests/corpus/scripts/lib/artifacts.mjs @@ -0,0 +1,23 @@ +import { access, readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const THIS_FILE = fileURLToPath(import.meta.url); + +export const REPOSITORY_ROOT = path.resolve(path.dirname(THIS_FILE), '../../../..'); +export const CORPUS_ROOT = path.join(REPOSITORY_ROOT, 'tests', 'corpus'); +export const DEFAULT_LOCK_PATH = path.join(CORPUS_ROOT, 'lock.json'); +export const DEFAULT_CACHE_ROOT = path.join(REPOSITORY_ROOT, '.cache', 'questionnaire'); + +export async function pathExists(filePath) { + try { + await access(filePath); + return true; + } catch { + return false; + } +} + +export async function readJson(filePath) { + return JSON.parse(await readFile(filePath, 'utf8')); +} diff --git a/tests/corpus/scripts/lib/corpus.mjs b/tests/corpus/scripts/lib/corpus.mjs new file mode 100644 index 0000000..1b632cc --- /dev/null +++ b/tests/corpus/scripts/lib/corpus.mjs @@ -0,0 +1,377 @@ +import { createHash } from 'node:crypto'; +import { readdir, readFile, stat } from 'node:fs/promises'; +import path from 'node:path'; + +import { + DEFAULT_CACHE_ROOT, + DEFAULT_LOCK_PATH, + REPOSITORY_ROOT, + pathExists, + readJson, +} from './artifacts.mjs'; + +export const LOCK_SCHEMA_VERSION = 1; + +const COMMIT_PATTERN = /^[0-9a-f]{40}$/; +const SHA256_PATTERN = /^[0-9a-f]{64}$/; +const GIT_BLOB_PATTERN = /^[0-9a-f]{40}$/; +const REPOSITORY_PATTERN = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/; +const QUESTION_MARKER_PATTERN = /^\[([A-Z_][A-Z0-9_#]*)([?!]?)(?:\|([^|\]]+)\|?)?(,.*?)?\]/gm; + +export class CorpusVerificationError extends Error { + constructor(errors) { + super(`Questionnaire corpus verification failed:\n- ${errors.join('\n- ')}`); + this.name = 'CorpusVerificationError'; + this.errors = errors; + } +} + +export function sha256Buffer(value) { + return createHash('sha256').update(value).digest('hex'); +} + +export function gitBlobShaBuffer(value) { + const buffer = Buffer.isBuffer(value) ? value : Buffer.from(value); + return createHash('sha1') + .update(`blob ${buffer.length}\0`) + .update(buffer) + .digest('hex'); +} + +export function stripMarkdownComments(markdown) { + return markdown.replace(/\/\/.*|\/\*[\s\S]*?\*\//g, ''); +} + +export function analyzeQuestionnaireText(markdown) { + const questionIds = [...stripMarkdownComments(markdown).matchAll(QUESTION_MARKER_PATTERN)] + .map((match) => match[1]); + const seen = new Set(); + const duplicateQuestionIds = [...new Set(questionIds.filter((questionId) => { + if (seen.has(questionId)) return true; + seen.add(questionId); + return false; + }))].sort(); + + return { + questName: markdown.match(/\{"name":"(\w*)"}/)?.[1] ?? null, + version: markdown.match(/\/\/\s*\{"version":"([^"]+)"}/)?.[1] ?? null, + questionIds, + duplicateQuestionIds, + endCount: questionIds.filter((questionId) => questionId === 'END').length, + }; +} + +export function isSafeRepositoryPath(repositoryPath) { + return typeof repositoryPath === 'string' + && repositoryPath.length > 0 + && !path.posix.isAbsolute(repositoryPath) + && !repositoryPath.includes('\\') + && path.posix.normalize(repositoryPath) === repositoryPath + && !repositoryPath.split('/').includes('..'); +} + +function addError(errors, condition, message) { + if (!condition) errors.push(message); +} + +export function validateCorpusLock(lock) { + const errors = []; + + addError(errors, lock && typeof lock === 'object', 'Lock must be a JSON object.'); + if (!lock || typeof lock !== 'object') throw new CorpusVerificationError(errors); + + addError(errors, lock.schemaVersion === LOCK_SCHEMA_VERSION, + `schemaVersion must be ${LOCK_SCHEMA_VERSION}.`); + addError(errors, REPOSITORY_PATTERN.test(lock.repository ?? ''), + 'repository must use the owner/name form.'); + addError(errors, typeof lock.repositoryUrl === 'string' && lock.repositoryUrl.startsWith('https://'), + 'repositoryUrl must be an HTTPS URL.'); + addError(errors, typeof lock.defaultBranch === 'string' && lock.defaultBranch.length > 0, + 'defaultBranch is required for drift checks.'); + addError(errors, COMMIT_PATTERN.test(lock.commit ?? ''), 'commit must be a full 40-character Git SHA.'); + addError(errors, isSafeRepositoryPath(lock.cacheRoot ?? ''), 'cacheRoot must be repository-relative and safe.'); + addError(errors, lock.sourceDirectory === 'prod', 'sourceDirectory must be prod.'); + addError(errors, lock.environment === 'prod', 'environment must be prod.'); + addError(errors, Array.isArray(lock.files) && lock.files.length > 0, 'files must be a non-empty array.'); + + if (!Array.isArray(lock.files)) throw new CorpusVerificationError(errors); + + addError(errors, lock.files.length === lock.expectedFileCount, + `Expected ${lock.expectedFileCount} files but lock contains ${lock.files.length}.`); + + const paths = new Set(); + const moduleLocales = new Set(); + + for (const [index, entry] of lock.files.entries()) { + const label = entry?.path ?? `files[${index}]`; + addError(errors, entry && typeof entry === 'object', `${label}: entry must be an object.`); + if (!entry || typeof entry !== 'object') continue; + + addError(errors, typeof entry.module === 'string' && entry.module.length > 0, + `${label}: module is required.`); + addError(errors, entry.locale === 'en' || entry.locale === 'es', + `${label}: locale must be en or es.`); + addError(errors, entry.language === 'en' || entry.language === 'es', + `${label}: language must be en or es.`); + addError(errors, entry.language === entry.locale, + `${label}: language must match locale.`); + addError(errors, isSafeRepositoryPath(entry.path), `${label}: path is unsafe.`); + addError(errors, entry.path?.startsWith(`${lock.sourceDirectory}/`), + `${label}: production path must be below ${lock.sourceDirectory}/.`); + addError(errors, typeof entry.questName === 'string' && /^\w+$/.test(entry.questName), + `${label}: questName is invalid.`); + addError(errors, typeof entry.version === 'string' && entry.version.length > 0, + `${label}: version is required.`); + addError(errors, Number.isInteger(entry.sourceQuestionCount) && entry.sourceQuestionCount > 0, + `${label}: sourceQuestionCount must be a positive integer.`); + addError(errors, SHA256_PATTERN.test(entry.sha256 ?? ''), `${label}: sha256 is invalid.`); + addError(errors, GIT_BLOB_PATTERN.test(entry.gitBlobSha ?? ''), `${label}: gitBlobSha is invalid.`); + + if (paths.has(entry.path)) errors.push(`${label}: duplicate production path.`); + paths.add(entry.path); + + const moduleLocale = `${entry.module}:${entry.locale}`; + if (moduleLocales.has(moduleLocale)) errors.push(`${label}: duplicate module/locale ${moduleLocale}.`); + moduleLocales.add(moduleLocale); + } + + const modules = new Map(); + for (const entry of lock.files) { + if (!modules.has(entry.module)) modules.set(entry.module, new Map()); + modules.get(entry.module).set(entry.locale, entry); + } + + addError(errors, modules.size === lock.expectedModuleCount, + `Expected ${lock.expectedModuleCount} modules but found ${modules.size}.`); + + const localeCounts = lock.files.reduce((counts, entry) => { + counts[entry.locale] = (counts[entry.locale] ?? 0) + 1; + return counts; + }, {}); + for (const locale of ['en', 'es']) { + addError(errors, localeCounts[locale] === lock.expectedLanguageCounts?.[locale], + `Expected ${lock.expectedLanguageCounts?.[locale]} ${locale} files but found ${localeCounts[locale] ?? 0}.`); + } + + for (const [moduleName, locales] of modules) { + addError(errors, locales.has('en'), `${moduleName}: every module must have an English questionnaire.`); + if (locales.has('en') && locales.has('es')) { + addError(errors, locales.get('en').questName === locales.get('es').questName, + `${moduleName}: English and Spanish questName values differ.`); + addError(errors, locales.get('en').version === locales.get('es').version, + `${moduleName}: English and Spanish versions differ.`); + } + } + + const exceptionKeys = new Set(); + for (const exception of lock.questionIdParityExceptions ?? []) { + const key = `${exception.module}:${exception.onlyIn}`; + addError(errors, modules.has(exception.module), `${key}: exception references an unknown module.`); + addError(errors, exception.onlyIn === 'en' || exception.onlyIn === 'es', + `${key}: onlyIn must be en or es.`); + addError(errors, Array.isArray(exception.ids) && exception.ids.length > 0, + `${key}: ids must be a non-empty array.`); + addError(errors, !exceptionKeys.has(key), `${key}: duplicate parity exception.`); + exceptionKeys.add(key); + } + + if (errors.length > 0) throw new CorpusVerificationError(errors); + return lock; +} + +export async function loadCorpusLock(lockPath = DEFAULT_LOCK_PATH) { + return validateCorpusLock(await readJson(lockPath)); +} + +export function resolveCorpusCacheRoot(lock, overrideCacheRoot = null) { + return overrideCacheRoot + ? path.resolve(overrideCacheRoot) + : path.resolve(REPOSITORY_ROOT, lock.cacheRoot ?? path.relative(REPOSITORY_ROOT, DEFAULT_CACHE_ROOT)); +} + +export function corpusCacheDirectory(lock, overrideCacheRoot = null) { + return path.join(resolveCorpusCacheRoot(lock, overrideCacheRoot), lock.commit); +} + +export function getLockedArtifacts(lock) { + return lock.files.map((entry) => ({ + path: entry.path, + sha256: entry.sha256, + gitBlobSha: entry.gitBlobSha, + })).sort((left, right) => left.path.localeCompare(right.path)); +} + +function decodeUtf8(buffer, label, errors) { + try { + return new TextDecoder('utf-8', { fatal: true }).decode(buffer); + } catch { + errors.push(`${label}: content is not valid UTF-8.`); + return null; + } +} + +async function listFilesRecursively(directory, baseDirectory = directory) { + if (!(await pathExists(directory))) return []; + const entries = await readdir(directory, { withFileTypes: true }); + const files = []; + + for (const entry of entries) { + const fullPath = path.join(directory, entry.name); + if (entry.isDirectory()) { + files.push(...await listFilesRecursively(fullPath, baseDirectory)); + } else if (entry.isFile()) { + files.push(path.relative(baseDirectory, fullPath).split(path.sep).join('/')); + } else { + files.push(path.relative(baseDirectory, fullPath).split(path.sep).join('/')); + } + } + + return files.sort(); +} + +function sortedDifference(left, right) { + return [...left].filter((value) => !right.has(value)).sort(); +} + +function expectedParityExceptions(lock) { + return new Map((lock.questionIdParityExceptions ?? []).map((exception) => ([ + `${exception.module}:${exception.onlyIn}`, + [...exception.ids].sort(), + ]))); +} + +function sameStringArray(left, right) { + return left.length === right.length && left.every((value, index) => value === right[index]); +} + +export async function verifyCorpus({ + lock, + cacheDir = corpusCacheDirectory(lock), + requireExactFileSet = true, +} = {}) { + validateCorpusLock(lock); + const errors = []; + const analyses = new Map(); + const expectedArtifacts = getLockedArtifacts(lock); + + if (!(await pathExists(cacheDir))) { + throw new CorpusVerificationError([ + `Cache directory is missing: ${cacheDir}`, + 'Run npm run corpus:fetch before corpus-backed tests.', + ]); + } + + const cacheStats = await stat(cacheDir); + if (!cacheStats.isDirectory()) { + throw new CorpusVerificationError([`Cache path is not a directory: ${cacheDir}`]); + } + + if (requireExactFileSet) { + const expectedPaths = new Set(expectedArtifacts.map((artifact) => artifact.path)); + const actualPaths = new Set((await listFilesRecursively(cacheDir)) + .filter((repositoryPath) => repositoryPath.startsWith(`${lock.sourceDirectory}/`))); + for (const missingPath of sortedDifference(expectedPaths, actualPaths)) { + errors.push(`${missingPath}: locked file is missing from the cache.`); + } + for (const unexpectedPath of sortedDifference(actualPaths, expectedPaths)) { + errors.push(`${unexpectedPath}: unexpected file exists in the corpus cache.`); + } + } + + for (const artifact of expectedArtifacts) { + const filePath = path.join(cacheDir, ...artifact.path.split('/')); + let buffer; + try { + buffer = await readFile(filePath); + } catch (error) { + errors.push(`${artifact.path}: unable to read locked file (${error.code ?? error.message}).`); + continue; + } + + const actualSha256 = sha256Buffer(buffer); + if (actualSha256 !== artifact.sha256) { + errors.push(`${artifact.path}: SHA-256 mismatch (expected ${artifact.sha256}, got ${actualSha256}).`); + } + const actualGitBlobSha = gitBlobShaBuffer(buffer); + if (actualGitBlobSha !== artifact.gitBlobSha) { + errors.push(`${artifact.path}: Git blob SHA mismatch (expected ${artifact.gitBlobSha}, got ${actualGitBlobSha}).`); + } + + const text = decodeUtf8(buffer, artifact.path, errors); + if (text === null) continue; + } + + for (const entry of lock.files) { + const filePath = path.join(cacheDir, ...entry.path.split('/')); + let text; + try { + text = decodeUtf8(await readFile(filePath), entry.path, errors); + } catch { + continue; + } + if (text === null) continue; + + const analysis = analyzeQuestionnaireText(text); + analyses.set(entry.path, analysis); + if (analysis.questName !== entry.questName) { + errors.push(`${entry.path}: questName mismatch (expected ${entry.questName}, got ${analysis.questName}).`); + } + if (analysis.version !== entry.version) { + errors.push(`${entry.path}: version mismatch (expected ${entry.version}, got ${analysis.version}).`); + } + if (analysis.questionIds.length !== entry.sourceQuestionCount) { + errors.push(`${entry.path}: source question count mismatch (expected ${entry.sourceQuestionCount}, got ${analysis.questionIds.length}).`); + } + if (analysis.endCount !== 1) { + errors.push(`${entry.path}: expected exactly one END marker, found ${analysis.endCount}.`); + } + if (analysis.duplicateQuestionIds.length > 0) { + errors.push(`${entry.path}: duplicate question IDs: ${analysis.duplicateQuestionIds.join(', ')}.`); + } + + } + + const exceptionMap = expectedParityExceptions(lock); + const usedExceptionKeys = new Set(); + const moduleEntries = Map.groupBy(lock.files, (entry) => entry.module); + for (const [moduleName, entries] of moduleEntries) { + const englishEntry = entries.find((entry) => entry.locale === 'en'); + const spanishEntry = entries.find((entry) => entry.locale === 'es'); + if (!englishEntry || !spanishEntry) continue; + + const englishAnalysis = analyses.get(englishEntry.path); + const spanishAnalysis = analyses.get(spanishEntry.path); + if (!englishAnalysis || !spanishAnalysis) continue; + + const englishIds = new Set(englishAnalysis.questionIds); + const spanishIds = new Set(spanishAnalysis.questionIds); + for (const [locale, actualDifference] of [ + ['en', sortedDifference(englishIds, spanishIds)], + ['es', sortedDifference(spanishIds, englishIds)], + ]) { + const key = `${moduleName}:${locale}`; + const expectedDifference = exceptionMap.get(key) ?? []; + if (!sameStringArray(actualDifference, expectedDifference)) { + errors.push(`${moduleName}: IDs only in ${locale} differ from the lock baseline (expected [${expectedDifference.join(', ')}], got [${actualDifference.join(', ')}]).`); + } + if (exceptionMap.has(key)) usedExceptionKeys.add(key); + } + } + + for (const key of exceptionMap.keys()) { + if (!usedExceptionKeys.has(key)) errors.push(`${key}: parity exception was not evaluated.`); + } + + if (errors.length > 0) throw new CorpusVerificationError(errors); + + return { + commit: lock.commit, + files: lock.files.length, + modules: new Set(lock.files.map((entry) => entry.module)).size, + localeCounts: lock.files.reduce((counts, entry) => { + counts[entry.locale] = (counts[entry.locale] ?? 0) + 1; + return counts; + }, {}), + sourceQuestionCount: lock.files.reduce((total, entry) => total + entry.sourceQuestionCount, 0), + }; +} diff --git a/tests/corpus/scripts/lib/structuralCatalog.mjs b/tests/corpus/scripts/lib/structuralCatalog.mjs new file mode 100644 index 0000000..638065b --- /dev/null +++ b/tests/corpus/scripts/lib/structuralCatalog.mjs @@ -0,0 +1,483 @@ +/** + * Build a reviewable description of a questionnaire after Quest has parsed it. + * + * This deliberately describes structure only. It does not try to evaluate + * conditions, navigate a questionnaire, or infer reachable paths. Keeping + * those concerns separate makes the catalog an honest denominator for the + * later path-generation work. + */ + +export const STRUCTURAL_CATALOG_SCHEMA_VERSION = 1; + +const LOOP_SUFFIX = /_(\d+)_(\d+)[?!]?$/; +const ASYNC_MARKUP_ID = /^\[([^\]|?!]+)[?!]?\]$/; + +function asArray(value) { + return value == null ? [] : Array.from(value); +} + +function normaliseString(value) { + return typeof value === 'string' ? value.trim() : ''; +} + +function optionalString(value) { + const normalised = normaliseString(value); + return normalised || null; +} + +function safeDecode(value) { + const text = normaliseString(value); + if (!text) return ''; + + try { + return decodeURIComponent(text); + } catch { + // A malformed percent escape is useful evidence in the catalog. Preserve + // it instead of making generation fail before the malformed form can be + // reviewed. + return text; + } +} + +function getAttribute(element, attributeName) { + if (!element?.getAttribute) return null; + return element.getAttribute(attributeName); +} + +function getSkipTarget(element) { + return optionalString(getAttribute(element, 'skipto')) + ?? optionalString(getAttribute(element, 'skipTo')); +} + +function sourceQuestionId(question, index) { + return optionalString(question?.questionID) ?? `__question_${index}`; +} + +function exactQuestionId(question, fallback) { + return optionalString(question?.questionIDExactSearch) + ?? fallback.replace(/[?!]$/, ''); +} + +function controlDescriptor(element) { + const tag = element?.tagName?.toLowerCase?.() ?? 'unknown'; + const type = optionalString(getAttribute(element, 'type')) + ?? (tag === 'textarea' ? 'textarea' : tag === 'select' ? 'select' : null); + const name = optionalString(getAttribute(element, 'name')); + const value = optionalString(getAttribute(element, 'value')); + + return { + id: optionalString(getAttribute(element, 'id')), + tag, + type, + name, + value, + required: element?.hasAttribute?.('required') ?? false, + noResponse: element?.classList?.contains?.('noresponse') ?? false, + }; +} + +function conditionScope(element, form, attribute) { + if (element === form) return 'question'; + if (attribute === 'if' && getSkipTarget(element)) return 'conditional-transition'; + if (element?.hasAttribute?.('data-gridrow')) return 'grid-row'; + if (element?.classList?.contains?.('grid-displayif')) return 'grid-inline'; + if (element?.classList?.contains?.('response')) return 'response'; + if (element?.classList?.contains?.('displayif')) return 'inline'; + return 'element'; +} + +function groupControls(elements) { + const groups = []; + const groupsByKey = new Map(); + + for (const element of elements) { + const descriptor = controlDescriptor(element); + const key = [descriptor.tag, descriptor.type ?? '', descriptor.name ?? ''].join('\u0000'); + let group = groupsByKey.get(key); + + if (!group) { + group = { + tag: descriptor.tag, + type: descriptor.type, + name: descriptor.name, + count: 0, + required: false, + noResponseCount: 0, + values: [], + }; + groupsByKey.set(key, group); + groups.push(group); + } + + group.count += 1; + group.required ||= descriptor.required; + group.noResponseCount += descriptor.noResponse ? 1 : 0; + if (descriptor.value && !group.values.includes(descriptor.value)) { + group.values.push(descriptor.value); + } + } + + return groups; +} + +function isResponseControl(element) { + const tag = element?.tagName?.toLowerCase?.(); + const type = normaliseString(getAttribute(element, 'type')).toLowerCase(); + if (tag === 'textarea' || tag === 'select') return true; + if (tag !== 'input') return false; + return !['button', 'hidden', 'reset', 'submit'].includes(type); +} + +function conditionSitesForForm(form, questionId, questionIndex) { + const sites = []; + const conditionAttributes = ['displayif', 'data-displayif', 'if']; + const candidates = [form, ...asArray(form?.querySelectorAll?.('[displayif], [data-displayif], [if]'))]; + + for (const element of candidates) { + for (const attribute of conditionAttributes) { + const raw = getAttribute(element, attribute); + if (raw == null) continue; + sites.push({ + questionId, + questionIndex, + scope: conditionScope(element, form, attribute), + element: element?.tagName?.toLowerCase?.() ?? 'unknown', + elementId: optionalString(getAttribute(element, 'id')), + attribute, + rawCondition: normaliseString(raw), + decodedCondition: safeDecode(raw), + }); + } + } + + return sites; +} + +function questionKind(questionId, grid) { + const exactId = questionId.replace(/[?!]$/, ''); + if (grid) return 'grid'; + if (exactId === 'END') return 'terminal'; + if (exactId === 'END_OF_LOOP') return 'loop-boundary'; + if (exactId.startsWith('_CONTINUE')) return 'loop-continuation'; + return 'question'; +} + +function transitionKind(element) { + const descriptor = controlDescriptor(element); + if (descriptor.type !== 'hidden') return 'response'; + if (descriptor.noResponse) return 'no-response'; + if (getAttribute(element, 'if') != null) return 'conditional-default'; + return 'default'; +} + +function gridRecord(form, questionId, questionIndex) { + if (!form?.hasAttribute?.('data-grid')) return null; + + const rows = asArray(form.querySelectorAll?.('[data-gridrow]')); + const gridCells = asArray(form.querySelectorAll?.('[data-gridcell]')); + const responseTypes = [...new Set(gridCells + .map((cell) => normaliseString(getAttribute(cell, 'type')).toLowerCase()) + .filter(Boolean))]; + + return { + questionId, + questionIndex, + rowQuestionIds: rows.map((row) => optionalString(getAttribute(row, 'data-question-id'))).filter(Boolean), + rowCount: rows.length, + responseTypes, + responseValues: [...new Set(gridCells + .map((cell) => optionalString(getAttribute(cell, 'value'))) + .filter(Boolean))], + }; +} + +function loopMarkerForForm(form, questionId, questionIndex) { + const loopIndex = optionalString(getAttribute(form, 'loopindx')); + const firstQuestion = optionalString(getAttribute(form, 'firstquestion')); + const loopMaxQuestionId = optionalString(getAttribute(form, 'loopmax')); + if (!loopIndex && !firstQuestion && !loopMaxQuestionId) return null; + + return { + questionId, + questionIndex, + loopIndex, + firstQuestion, + loopMaxQuestionId, + }; +} + +function buildLoopDefinitions(loopStarts, questionRecords) { + const byLoopIndex = new Map(); + + for (const start of loopStarts) { + const key = start.loopIndex ?? 'unknown'; + const definition = byLoopIndex.get(key) ?? { + loopIndex: start.loopIndex, + loopMaxQuestionIds: [], + iterationFirstQuestionIds: [], + iterationStartIndexes: [], + }; + if (start.loopMaxQuestionId && !definition.loopMaxQuestionIds.includes(start.loopMaxQuestionId)) { + definition.loopMaxQuestionIds.push(start.loopMaxQuestionId); + } + definition.iterationFirstQuestionIds.push(start.questionId); + definition.iterationStartIndexes.push(start.questionIndex); + byLoopIndex.set(key, definition); + } + + return [...byLoopIndex.values()].map((definition) => { + const firstIndex = definition.iterationStartIndexes[0]; + const lastStartIndex = definition.iterationStartIndexes.at(-1); + const boundary = questionRecords.find(({ index, id }) => ( + index > lastStartIndex && id === 'END_OF_LOOP' + )); + const continuationQuestionIds = questionRecords + .filter(({ index, id }) => ( + index >= firstIndex + && index < (boundary?.index ?? Number.POSITIVE_INFINITY) + && id.startsWith(`_CONTINUE${definition.loopIndex}`) + )) + .map(({ id }) => id); + + return { + ...definition, + iterationCount: definition.iterationStartIndexes.length, + continuationQuestionIds, + boundaryIndex: boundary?.index ?? null, + }; + }); +} + +function asyncIdSet(asyncQuestionIds) { + const ids = new Set(); + for (const value of asyncQuestionIds ?? []) { + const text = normaliseString(value); + if (!text) continue; + const markupMatch = text.match(ASYNC_MARKUP_ID); + ids.add(markupMatch ? markupMatch[1] : text.replace(/[?!]$/, '')); + } + return ids; +} + +function structuralTargetResolver(processor) { + const questions = asArray(processor?.questions); + + return (target) => { + const normalisedTarget = normaliseString(target); + if (!normalisedTarget) return { resolved: false, kind: 'missing-target' }; + + // `findQuestion('END')` intentionally resolves to the final processed + // question, regardless of where an END marker occurs in source. + if (normalisedTarget === 'END') { + const index = questions.length - 1; + return index >= 0 + ? { resolved: true, kind: 'terminal', index, questionId: sourceQuestionId(questions[index], index) } + : { resolved: false, kind: 'missing-terminal' }; + } + + const exactIndex = questions.findIndex((question, index) => ( + exactQuestionId(question, sourceQuestionId(question, index)) === normalisedTarget + )); + if (exactIndex !== -1) { + return { + resolved: true, + kind: 'exact', + index: exactIndex, + questionId: sourceQuestionId(questions[exactIndex], exactIndex), + }; + } + + const prefixIndex = questions.findIndex((question, index) => ( + sourceQuestionId(question, index).startsWith(normalisedTarget) + )); + if (prefixIndex !== -1) { + return { + resolved: true, + kind: normalisedTarget.startsWith('_CONTINUE') ? 'loop-continue' : 'prefix', + index: prefixIndex, + questionId: sourceQuestionId(questions[prefixIndex], prefixIndex), + }; + } + + return { resolved: false, kind: 'unresolved' }; + }; +} + +function normaliseResolution(value) { + if (value === true) return { resolved: true, kind: 'custom' }; + if (value === false || value == null) return { resolved: false, kind: 'custom' }; + if (typeof value === 'number') return { resolved: true, kind: 'custom', index: value }; + if (typeof value === 'string') return { resolved: true, kind: 'custom', questionId: value }; + if (typeof value === 'object') { + return { + resolved: Boolean(value.resolved), + kind: optionalString(value.kind) ?? 'custom', + ...(Number.isInteger(value.index) ? { index: value.index } : {}), + ...(optionalString(value.questionId) ? { questionId: optionalString(value.questionId) } : {}), + }; + } + return { resolved: false, kind: 'custom' }; +} + +/** + * Build a catalog record from a processed Quest survey. + * + * `resolveTarget`, receives `(target, context)` and may return + * a boolean, an index/string, or `{ resolved, kind, index?, questionId? }`. + * The fallback performs structural exact/prefix lookup only. Corpus tests + * should inject a resolver that calls Quest when virtual loop routing matters. + */ +export function buildStructuralCatalogRecord({ + record = {}, + processor, + renderedRoot, + asyncQuestionIds = [], + resolveTarget, +} = {}) { + const questions = asArray(processor?.questions); + const renderedForms = asArray(renderedRoot?.querySelectorAll?.('form.question')); + const asyncIds = asyncIdSet(asyncQuestionIds); + const targetResolver = typeof resolveTarget === 'function' + ? resolveTarget + : structuralTargetResolver(processor); + const questionRecords = []; + const transitions = []; + const conditionSites = []; + const grids = []; + const loops = []; + let controlCount = 0; + let responseControlCount = 0; + + for (const [questionIndex, question] of questions.entries()) { + const questionId = sourceQuestionId(question, questionIndex); + const form = processor?.processedQuestions?.get?.(questionIndex) ?? renderedForms[questionIndex] ?? null; + const controls = asArray(form?.querySelectorAll?.('input, textarea, select, button')); + const skipElements = asArray(form?.querySelectorAll?.('[skipto], [skipTo]')); + const formConditions = conditionSitesForForm(form, questionId, questionIndex); + const grid = gridRecord(form, questionId, questionIndex); + const loop = loopMarkerForForm(form, questionId, questionIndex); + const loopSuffix = questionId.match(LOOP_SUFFIX); + + controlCount += controls.length; + responseControlCount += controls.filter(isResponseControl).length; + conditionSites.push(...formConditions); + if (grid) grids.push(grid); + if (loop) loops.push(loop); + + const transitionStart = transitions.length; + for (const element of skipElements) { + const target = getSkipTarget(element); + if (!target) continue; + const resolution = normaliseResolution(targetResolver(target, { + record, + processor, + sourceQuestion: question, + questionId, + questionIndex, + element, + })); + const descriptor = controlDescriptor(element); + transitions.push({ + from: questionId, + fromIndex: questionIndex, + to: target, + kind: transitionKind(element), + control: { + id: descriptor.id, + tag: descriptor.tag, + type: descriptor.type, + name: descriptor.name, + value: descriptor.value, + noResponse: descriptor.noResponse, + rawCondition: optionalString(getAttribute(element, 'if')), + decodedCondition: getAttribute(element, 'if') == null + ? null + : safeDecode(getAttribute(element, 'if')), + }, + resolution, + }); + } + + questionRecords.push({ + index: questionIndex, + id: questionId, + exactId: exactQuestionId(question, questionId), + domId: optionalString(getAttribute(form, 'id')), + kind: questionKind(questionId, grid), + async: asyncIds.has(exactQuestionId(question, questionId)), + loopIteration: loopSuffix + ? { iteration: Number(loopSuffix[1]), copy: Number(loopSuffix[2]) } + : null, + controls: groupControls(controls), + controlCount: controls.length, + responseControlCount: controls.filter(isResponseControl).length, + conditionSiteCount: formConditions.length, + explicitTransitionCount: transitions.length - transitionStart, + }); + } + + const unresolvedByTarget = new Map(); + transitions.forEach((transition, transitionIndex) => { + if (transition.resolution.resolved) return; + const unresolved = unresolvedByTarget.get(transition.to) ?? { + target: transition.to, + transitionIndexes: [], + fromQuestionIds: [], + }; + unresolved.transitionIndexes.push(transitionIndex); + if (!unresolved.fromQuestionIds.includes(transition.from)) { + unresolved.fromQuestionIds.push(transition.from); + } + unresolvedByTarget.set(transition.to, unresolved); + }); + + const loopContinuationQuestionIds = questionRecords + .filter(({ id }) => id.startsWith('_CONTINUE')) + .map(({ id }) => id); + const loopSentinelIndexes = questionRecords + .filter(({ id }) => id === 'END_OF_LOOP') + .map(({ index }) => index); + const loopDefinitions = buildLoopDefinitions(loops, questionRecords); + + return { + schemaVersion: STRUCTURAL_CATALOG_SCHEMA_VERSION, + module: record.module ?? null, + locale: record.locale ?? record.language ?? null, + language: record.language ?? record.locale ?? null, + path: record.path ?? null, + questName: record.questName ?? null, + version: record.version ?? null, + authoredMarkerCount: Number.isInteger(record.sourceQuestionCount) ? record.sourceQuestionCount : null, + processedQuestionIds: questionRecords.map(({ id }) => id), + questionRecords, + transitions, + conditionSites, + grids, + loops: { + definitions: loopDefinitions, + starts: loops, + continuationQuestionIds: loopContinuationQuestionIds, + sentinelIndexes: loopSentinelIndexes, + loopExpandedQuestionCount: questionRecords.filter(({ loopIteration }) => loopIteration !== null).length, + }, + unresolvedTargets: [...unresolvedByTarget.values()], + counts: { + authoredMarkerCount: Number.isInteger(record.sourceQuestionCount) ? record.sourceQuestionCount : null, + processorQuestionCount: questions.length, + processedQuestionCount: processor?.processedQuestions?.size ?? questionRecords.filter(({ domId }) => domId !== null).length, + renderedFormCount: renderedForms.length, + controlCount, + responseControlCount, + explicitTransitionCount: transitions.length, + sequentialAdjacencyCount: Math.max(questions.length - 1, 0), + resolvedExplicitTransitionCount: transitions.filter(({ resolution }) => resolution.resolved).length, + unresolvedExplicitTransitionCount: transitions.filter(({ resolution }) => !resolution.resolved).length, + conditionSiteCount: conditionSites.length, + gridQuestionCount: grids.length, + gridRowCount: grids.reduce((count, grid) => count + grid.rowCount, 0), + loopStartCount: loops.length, + loopDefinitionCount: loopDefinitions.length, + loopExpandedQuestionCount: questionRecords.filter(({ loopIteration }) => loopIteration !== null).length, + }, + }; +} diff --git a/tests/corpus/scripts/verifyCorpus.mjs b/tests/corpus/scripts/verifyCorpus.mjs new file mode 100644 index 0000000..5c3b8e4 --- /dev/null +++ b/tests/corpus/scripts/verifyCorpus.mjs @@ -0,0 +1,32 @@ +import path from 'node:path'; + +import { DEFAULT_LOCK_PATH } from './lib/artifacts.mjs'; +import { corpusCacheDirectory, loadCorpusLock, verifyCorpus } from './lib/corpus.mjs'; + +function parseArguments(argv) { + const options = { lockPath: DEFAULT_LOCK_PATH, cacheRoot: null }; + for (let index = 0; index < argv.length; index += 1) { + const argument = argv[index]; + if (argument === '--lock') options.lockPath = path.resolve(argv[++index]); + else if (argument === '--cache-root') options.cacheRoot = path.resolve(argv[++index]); + else throw new Error(`Unknown argument: ${argument}`); + } + return options; +} + +async function main() { + const options = parseArguments(process.argv.slice(2)); + const lock = await loadCorpusLock(options.lockPath); + const cacheDir = corpusCacheDirectory(lock, options.cacheRoot); + const summary = await verifyCorpus({ lock, cacheDir }); + + console.log(`Verified questionnaire corpus at ${summary.commit}:`); + console.log(`- ${summary.files} prod files (${summary.localeCounts.en} en, ${summary.localeCounts.es} es)`); + console.log(`- ${summary.modules} logical modules`); + console.log(`- ${summary.sourceQuestionCount} authored question markers`); +} + +main().catch((error) => { + console.error(error.message); + process.exitCode = 1; +}); diff --git a/tests/corpus/structuralCatalog.json b/tests/corpus/structuralCatalog.json new file mode 100644 index 0000000..2fc6800 --- /dev/null +++ b/tests/corpus/structuralCatalog.json @@ -0,0 +1,28520 @@ +{ + "schemaVersion": 1, + "corpus": { + "repository": "episphere/questionnaire", + "commit": "7ae99a22af325cf0e14be047a7636462db9bfd50", + "environment": "prod", + "fileCount": 29, + "moduleCount": 15 + }, + "oracle": { + "boundary": "transform.render with isRenderer=true and activate=false", + "hostPersona": "external-branch-primary", + "fixedDate": "2024-07-15T12:00:00.000Z", + "sequentialAdjacency": "Adjacent runtimeQuestionIds; path feasibility is intentionally not inferred." + }, + "counts": { + "authoredMarkerCount": 3568, + "processorQuestionCount": 8302, + "processedQuestionCount": 8302, + "renderedFormCount": 8302, + "controlCount": 53169, + "responseControlCount": 27160, + "explicitTransitionCount": 7586, + "sequentialAdjacencyCount": 8273, + "resolvedExplicitTransitionCount": 7586, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 21447, + "gridQuestionCount": 38, + "gridRowCount": 252, + "loopStartCount": 250, + "loopDefinitionCount": 10, + "loopExpandedQuestionCount": 5100, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "modules": [ + { + "module": "module1", + "counts": { + "authoredMarkerCount": 631, + "processorQuestionCount": 3996, + "processedQuestionCount": 3996, + "renderedFormCount": 3996, + "controlCount": 23386, + "responseControlCount": 11220, + "explicitTransitionCount": 3716, + "sequentialAdjacencyCount": 3994, + "resolvedExplicitTransitionCount": 3716, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 11698, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 100, + "loopDefinitionCount": 4, + "loopExpandedQuestionCount": 3500, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/module1.txt", + "authoredMarkerCount": 316, + "processorQuestionCount": 1998, + "gridQuestionCount": 0, + "loopDefinitionCount": 2, + "explicitTransitionCount": 1885, + "conditionSiteCount": 5903, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/module1Spanish.txt", + "authoredMarkerCount": 315, + "processorQuestionCount": 1998, + "gridQuestionCount": 0, + "loopDefinitionCount": 2, + "explicitTransitionCount": 1831, + "conditionSiteCount": 5795, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "module2", + "counts": { + "authoredMarkerCount": 719, + "processorQuestionCount": 1108, + "processedQuestionCount": 1108, + "renderedFormCount": 1108, + "controlCount": 6926, + "responseControlCount": 3200, + "explicitTransitionCount": 1150, + "sequentialAdjacencyCount": 1106, + "resolvedExplicitTransitionCount": 1150, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 2769, + "gridQuestionCount": 12, + "gridRowCount": 68, + "loopStartCount": 50, + "loopDefinitionCount": 2, + "loopExpandedQuestionCount": 450, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/module2.txt", + "authoredMarkerCount": 359, + "processorQuestionCount": 554, + "gridQuestionCount": 6, + "loopDefinitionCount": 1, + "explicitTransitionCount": 558, + "conditionSiteCount": 1367, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/module2Spanish.txt", + "authoredMarkerCount": 360, + "processorQuestionCount": 554, + "gridQuestionCount": 6, + "loopDefinitionCount": 1, + "explicitTransitionCount": 592, + "conditionSiteCount": 1402, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "module2024ConnectExperience", + "counts": { + "authoredMarkerCount": 86, + "processorQuestionCount": 86, + "processedQuestionCount": 86, + "renderedFormCount": 86, + "controlCount": 548, + "responseControlCount": 294, + "explicitTransitionCount": 32, + "sequentialAdjacencyCount": 84, + "resolvedExplicitTransitionCount": 32, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 56, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/module2024ConnectExperience.txt", + "authoredMarkerCount": 43, + "processorQuestionCount": 43, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 16, + "conditionSiteCount": 28, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/module2024ConnectExperienceSpanish.txt", + "authoredMarkerCount": 43, + "processorQuestionCount": 43, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 16, + "conditionSiteCount": 28, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "module2026ROIPreferences", + "counts": { + "authoredMarkerCount": 32, + "processorQuestionCount": 32, + "processedQuestionCount": 32, + "renderedFormCount": 32, + "controlCount": 235, + "responseControlCount": 158, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 30, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/module2026ROIPreferences.txt", + "authoredMarkerCount": 16, + "processorQuestionCount": 16, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 0, + "conditionSiteCount": 0, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/module2026ROIPreferencesSpanish.txt", + "authoredMarkerCount": 16, + "processorQuestionCount": 16, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 0, + "conditionSiteCount": 0, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "module3", + "counts": { + "authoredMarkerCount": 628, + "processorQuestionCount": 610, + "processedQuestionCount": 610, + "renderedFormCount": 610, + "controlCount": 4034, + "responseControlCount": 2094, + "explicitTransitionCount": 508, + "sequentialAdjacencyCount": 608, + "resolvedExplicitTransitionCount": 508, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 1705, + "gridQuestionCount": 8, + "gridRowCount": 56, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/module3.txt", + "authoredMarkerCount": 314, + "processorQuestionCount": 305, + "gridQuestionCount": 4, + "loopDefinitionCount": 0, + "explicitTransitionCount": 254, + "conditionSiteCount": 853, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/module3Spanish.txt", + "authoredMarkerCount": 314, + "processorQuestionCount": 305, + "gridQuestionCount": 4, + "loopDefinitionCount": 0, + "explicitTransitionCount": 254, + "conditionSiteCount": 852, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "module4", + "counts": { + "authoredMarkerCount": 734, + "processorQuestionCount": 734, + "processedQuestionCount": 734, + "renderedFormCount": 734, + "controlCount": 5635, + "responseControlCount": 3354, + "explicitTransitionCount": 518, + "sequentialAdjacencyCount": 732, + "resolvedExplicitTransitionCount": 518, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 2696, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/module4.txt", + "authoredMarkerCount": 367, + "processorQuestionCount": 367, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 259, + "conditionSiteCount": 1349, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/module4Spanish.txt", + "authoredMarkerCount": 367, + "processorQuestionCount": 367, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 259, + "conditionSiteCount": 1347, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleBiospecimen", + "counts": { + "authoredMarkerCount": 105, + "processorQuestionCount": 101, + "processedQuestionCount": 101, + "renderedFormCount": 101, + "controlCount": 702, + "responseControlCount": 406, + "explicitTransitionCount": 50, + "sequentialAdjacencyCount": 99, + "resolvedExplicitTransitionCount": 50, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 54, + "gridQuestionCount": 2, + "gridRowCount": 6, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleBiospecimen.txt", + "authoredMarkerCount": 52, + "processorQuestionCount": 50, + "gridQuestionCount": 1, + "loopDefinitionCount": 0, + "explicitTransitionCount": 25, + "conditionSiteCount": 27, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleBiospecimenSpanish.txt", + "authoredMarkerCount": 53, + "processorQuestionCount": 51, + "gridQuestionCount": 1, + "loopDefinitionCount": 0, + "explicitTransitionCount": 25, + "conditionSiteCount": 27, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleCancerScreeningHistory", + "counts": { + "authoredMarkerCount": 288, + "processorQuestionCount": 288, + "processedQuestionCount": 288, + "renderedFormCount": 288, + "controlCount": 2316, + "responseControlCount": 1362, + "explicitTransitionCount": 474, + "sequentialAdjacencyCount": 286, + "resolvedExplicitTransitionCount": 474, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 213, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleCancerScreeningHistory.txt", + "authoredMarkerCount": 144, + "processorQuestionCount": 144, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 237, + "conditionSiteCount": 107, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleCancerScreeningHistorySpanish.txt", + "authoredMarkerCount": 144, + "processorQuestionCount": 144, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 237, + "conditionSiteCount": 106, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleClinicalBloodUrine", + "counts": { + "authoredMarkerCount": 42, + "processorQuestionCount": 38, + "processedQuestionCount": 38, + "renderedFormCount": 38, + "controlCount": 198, + "responseControlCount": 92, + "explicitTransitionCount": 10, + "sequentialAdjacencyCount": 36, + "resolvedExplicitTransitionCount": 10, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 20, + "gridQuestionCount": 2, + "gridRowCount": 6, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleClinicalBloodUrine.txt", + "authoredMarkerCount": 21, + "processorQuestionCount": 19, + "gridQuestionCount": 1, + "loopDefinitionCount": 0, + "explicitTransitionCount": 5, + "conditionSiteCount": 10, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleClinicalBloodUrineSpanish.txt", + "authoredMarkerCount": 21, + "processorQuestionCount": 19, + "gridQuestionCount": 1, + "loopDefinitionCount": 0, + "explicitTransitionCount": 5, + "conditionSiteCount": 10, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleCOVID19", + "counts": { + "authoredMarkerCount": 194, + "processorQuestionCount": 1200, + "processedQuestionCount": 1200, + "renderedFormCount": 1200, + "controlCount": 7844, + "responseControlCount": 3940, + "explicitTransitionCount": 1080, + "sequentialAdjacencyCount": 1198, + "resolvedExplicitTransitionCount": 1080, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 2194, + "gridQuestionCount": 14, + "gridRowCount": 116, + "loopStartCount": 100, + "loopDefinitionCount": 4, + "loopExpandedQuestionCount": 1150, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleCOVID19.txt", + "authoredMarkerCount": 97, + "processorQuestionCount": 600, + "gridQuestionCount": 7, + "loopDefinitionCount": 2, + "explicitTransitionCount": 540, + "conditionSiteCount": 1097, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleCOVID19Spanish.txt", + "authoredMarkerCount": 97, + "processorQuestionCount": 600, + "gridQuestionCount": 7, + "loopDefinitionCount": 2, + "explicitTransitionCount": 540, + "conditionSiteCount": 1097, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleDietScreener", + "counts": { + "authoredMarkerCount": 6, + "processorQuestionCount": 6, + "processedQuestionCount": 6, + "renderedFormCount": 6, + "controlCount": 326, + "responseControlCount": 314, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 4, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleDietScreener", + "authoredMarkerCount": 3, + "processorQuestionCount": 3, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 0, + "conditionSiteCount": 0, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleDietScreenerSpanish.txt", + "authoredMarkerCount": 3, + "processorQuestionCount": 3, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 0, + "conditionSiteCount": 0, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleMenstrual", + "counts": { + "authoredMarkerCount": 10, + "processorQuestionCount": 10, + "processedQuestionCount": 10, + "renderedFormCount": 10, + "controlCount": 28, + "responseControlCount": 6, + "explicitTransitionCount": 2, + "sequentialAdjacencyCount": 8, + "resolvedExplicitTransitionCount": 2, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 4, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleMenstrual.txt", + "authoredMarkerCount": 5, + "processorQuestionCount": 5, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 1, + "conditionSiteCount": 2, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleMenstrualSpanish.txt", + "authoredMarkerCount": 5, + "processorQuestionCount": 5, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 1, + "conditionSiteCount": 2, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleMouthwash", + "counts": { + "authoredMarkerCount": 68, + "processorQuestionCount": 68, + "processedQuestionCount": 68, + "renderedFormCount": 68, + "controlCount": 518, + "responseControlCount": 318, + "explicitTransitionCount": 44, + "sequentialAdjacencyCount": 66, + "resolvedExplicitTransitionCount": 44, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 38, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleMouthwash.txt", + "authoredMarkerCount": 34, + "processorQuestionCount": 34, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 22, + "conditionSiteCount": 19, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleMouthwashSpanish.txt", + "authoredMarkerCount": 34, + "processorQuestionCount": 34, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 22, + "conditionSiteCount": 19, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "moduleQoL", + "counts": { + "authoredMarkerCount": 22, + "processorQuestionCount": 22, + "processedQuestionCount": 22, + "renderedFormCount": 22, + "controlCount": 462, + "responseControlCount": 400, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 20, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/moduleQoL.txt", + "authoredMarkerCount": 11, + "processorQuestionCount": 11, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 0, + "conditionSiteCount": 0, + "unresolvedExplicitTransitionCount": 0 + }, + { + "locale": "es", + "path": "prod/moduleQoLSpanish.txt", + "authoredMarkerCount": 11, + "processorQuestionCount": 11, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 0, + "conditionSiteCount": 0, + "unresolvedExplicitTransitionCount": 0 + } + ] + }, + { + "module": "ssnModule", + "counts": { + "authoredMarkerCount": 3, + "processorQuestionCount": 3, + "processedQuestionCount": 3, + "renderedFormCount": 3, + "controlCount": 11, + "responseControlCount": 2, + "explicitTransitionCount": 2, + "sequentialAdjacencyCount": 2, + "resolvedExplicitTransitionCount": 2, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0 + }, + "surveys": [ + { + "locale": "en", + "path": "prod/ssnModule.txt", + "authoredMarkerCount": 3, + "processorQuestionCount": 3, + "gridQuestionCount": 0, + "loopDefinitionCount": 0, + "explicitTransitionCount": 2, + "conditionSiteCount": 0, + "unresolvedExplicitTransitionCount": 0 + } + ] + } + ], + "surveys": [ + { + "schemaVersion": 1, + "module": "module1", + "locale": "en", + "language": "en", + "path": "prod/module1.txt", + "sha256": "c36e2ceb44808d43538d04f43c336085ec73c05614ad5791fbb6e58582b8e107", + "questName": "D_726699695_V2", + "version": "4.0", + "authoredMarkerCount": 316, + "runtimeQuestionIds": [ + "INTROM1", + "INTROBAC", + "SECTION1", + "D_783167257?", + "RACEETHINTRO", + "D_384191091?", + "D_362270886?", + "D_525535977?", + "D_976808005?", + "D_308014437?", + "D_351657815?", + "D_115616118?", + "D_797626610?", + "D_588212264?", + "D_407056417?", + "D_750420077!", + "INTROMH", + "D_537153788?", + "D_508846529?", + "D_904550680?", + "D_167101091?", + "D_965917116?", + "D_929240175?", + "D_836712013?", + "D_836890480?", + "D_624479779?", + "D_337278854?", + "D_681229479?", + "D_660358706?", + "D_884793537?", + "D_460062034?", + "D_110652436?", + "D_894259747?", + "D_448722126?", + "D_201449164?", + "D_436333358?", + "D_180961306?", + "D_554782332?", + "D_409622468?", + "D_448476881?", + "D_459764934?", + "D_374697037?", + "D_580911251?", + "D_190347832?", + "D_624777141?", + "D_980403315?", + "D_936039586?", + "D_430472084?", + "D_900541533?", + "D_139655599?", + "D_494032093?", + "D_301679110?", + "D_810918716?", + "D_874046190?", + "D_989016875?", + "D_878094302?", + "D_543728565?", + "D_173101988?", + "D_245861186?", + "D_420423416?", + "INTROSTD", + "D_874709643?", + "D_915230886?", + "D_530548878?", + "D_469947273?", + "D_685735916?", + "D_954405492?", + "D_103397024?", + "D_931470797?", + "D_922524563?", + "D_978485677?", + "D_523188839?", + "D_725626004?", + "D_846786840?", + "D_423547108?", + "D_266847650?", + "D_852898339?", + "D_467061940?", + "D_619481697?", + "D_134642404?", + "D_219956652?", + "D_852236900?", + "DEPRESSINTRO", + "D_347860896?", + "D_301414575?", + "INTROSURG", + "D_624179836?", + "D_367884741?", + "D_178353079?", + "D_550075233?", + "D_927516732?", + "D_552788665?", + "D_439736294?", + "D_216506024?", + "D_860920332?", + "D_986613440?", + "D_517307064?", + "D_477690298?", + "D_176453768?", + "D_145786416?", + "D_287605131?", + "D_701157499?", + "D_428639167?", + "D_282355641?", + "D_539301647?", + "D_579225381?", + "D_891214661?", + "D_150352141?", + "D_122887481?", + "D_378892977?", + "D_534007917?", + "D_224791140?", + "D_752636038?", + "D_518750011?", + "D_946504570?", + "D_275770221?", + "D_107060069?", + "D_882152987?", + "D_527057404?", + "D_453252072?", + "D_795940097?", + "D_406011084?", + "D_593017220?", + "D_875208305?", + "D_323512813?", + "D_338924834?", + "D_952682839?", + "D_746012894?", + "D_114314839?", + "D_677262300?", + "D_650399623?", + "D_820324171?", + "D_724181652?", + "D_912857732?", + "D_808806810?", + "D_207025341?", + "D_803129396?", + "D_827393644?", + "D_183572295?", + "D_630675760?", + "D_837402132?", + "D_431628922?", + "D_848580651?", + "D_207494582?", + "D_936904328?", + "D_365851428?", + "D_206319592?", + "D_769668224?", + "D_814664694?", + "D_109544008?", + "D_186831207?", + "D_283634623?", + "D_164752169?", + "D_512167179?", + "D_509933065?", + "D_967093163?", + "FAMHISTINTRO", + "D_535621923?", + "D_992987417?", + "MOM", + "D_170440011?", + "D_354326265?", + "D_422714611?", + "D_276353712?", + "D_814510313?", + "D_259397450?", + "D_528753070?", + "D_683981980?", + "D_402548942?", + "D_247198016?", + "D_891925519?", + "D_317093647?", + "D_684692228?", + "D_671347092?", + "D_875221479?", + "D_186170949?", + "D_726451917?", + "D_213545903?", + "D_765903702?", + "D_773974223?", + "D_433604862?", + "D_521369040?", + "D_497311092?", + "D_625249910?", + "D_838564850?", + "D_633764113?", + "D_882263738?", + "D_671308090?", + "D_367374606?", + "D_178774803?", + "D_628078826?", + "D_659784914?", + "D_173240848?", + "D_345146692?", + "D_243443318?", + "D_610382315?", + "D_135519371?", + "D_785019074?", + "D_152885579?", + "D_692910565?", + "D_522464057?", + "D_808655074?", + "D_659627058?", + "D_370198527?", + "D_291855684?", + "D_413536735?", + "D_210325948?", + "D_193297280?", + "D_121502359?", + "D_489402657?", + "D_727260639?", + "D_359291056?", + "D_968841976?", + "D_864981804?", + "D_499434567?", + "SIB", + "D_694265648!", + "SIBCONFIRM", + "D_406098499_1_1?", + "D_579563781_1_1?", + "D_807431780_1_1?", + "D_589588769_1_1?", + "D_890637099_1_1?", + "D_869387390_1_1?", + "D_537137982_1_1?", + "D_607773106_1_1?", + "D_578895128_1_1?", + "D_384881609_1_1?", + "D_483975329_1_1?", + "D_570279754_1_1?", + "D_907590067_1_1?", + "D_860112841_1_1?", + "D_158354252_1_1?", + "D_654594205_1_1?", + "D_550722030_1_1?", + "D_142912472_1_1?", + "D_158409298_1_1?", + "D_529744595_1_1?", + "D_315987564_1_1?", + "D_852278004_1_1?", + "D_391972881_1_1?", + "D_259089008_1_1?", + "D_209771602_1_1?", + "D_682651189_1_1?", + "D_750994269_1_1?", + "D_700889863_1_1?", + "D_990114799_1_1?", + "D_195363361_1_1?", + "D_216840563_1_1?", + "D_514034680_1_1?", + "D_247160067_1_1?", + "D_312545873_1_1?", + "SIBSUM_1_1", + "D_406098499_2_2?", + "D_579563781_2_2?", + "D_807431780_2_2?", + "D_589588769_2_2?", + "D_890637099_2_2?", + "D_869387390_2_2?", + "D_537137982_2_2?", + "D_607773106_2_2?", + "D_578895128_2_2?", + "D_384881609_2_2?", + "D_483975329_2_2?", + "D_570279754_2_2?", + "D_907590067_2_2?", + "D_860112841_2_2?", + "D_158354252_2_2?", + "D_654594205_2_2?", + "D_550722030_2_2?", + "D_142912472_2_2?", + "D_158409298_2_2?", + "D_529744595_2_2?", + "D_315987564_2_2?", + "D_852278004_2_2?", + "D_391972881_2_2?", + "D_259089008_2_2?", + "D_209771602_2_2?", + "D_682651189_2_2?", + "D_750994269_2_2?", + "D_700889863_2_2?", + "D_990114799_2_2?", + "D_195363361_2_2?", + "D_216840563_2_2?", + "D_514034680_2_2?", + "D_247160067_2_2?", + "D_312545873_2_2?", + "SIBSUM_2_2", + "D_406098499_3_3?", + "D_579563781_3_3?", + "D_807431780_3_3?", + "D_589588769_3_3?", + "D_890637099_3_3?", + "D_869387390_3_3?", + "D_537137982_3_3?", + "D_607773106_3_3?", + "D_578895128_3_3?", + "D_384881609_3_3?", + "D_483975329_3_3?", + "D_570279754_3_3?", + "D_907590067_3_3?", + "D_860112841_3_3?", + "D_158354252_3_3?", + "D_654594205_3_3?", + "D_550722030_3_3?", + "D_142912472_3_3?", + "D_158409298_3_3?", + "D_529744595_3_3?", + "D_315987564_3_3?", + "D_852278004_3_3?", + "D_391972881_3_3?", + "D_259089008_3_3?", + "D_209771602_3_3?", + "D_682651189_3_3?", + "D_750994269_3_3?", + "D_700889863_3_3?", + "D_990114799_3_3?", + "D_195363361_3_3?", + "D_216840563_3_3?", + "D_514034680_3_3?", + "D_247160067_3_3?", + "D_312545873_3_3?", + "SIBSUM_3_3", + "D_406098499_4_4?", + "D_579563781_4_4?", + "D_807431780_4_4?", + "D_589588769_4_4?", + "D_890637099_4_4?", + "D_869387390_4_4?", + "D_537137982_4_4?", + "D_607773106_4_4?", + "D_578895128_4_4?", + "D_384881609_4_4?", + "D_483975329_4_4?", + "D_570279754_4_4?", + "D_907590067_4_4?", + "D_860112841_4_4?", + "D_158354252_4_4?", + "D_654594205_4_4?", + "D_550722030_4_4?", + "D_142912472_4_4?", + "D_158409298_4_4?", + "D_529744595_4_4?", + "D_315987564_4_4?", + "D_852278004_4_4?", + "D_391972881_4_4?", + "D_259089008_4_4?", + "D_209771602_4_4?", + "D_682651189_4_4?", + "D_750994269_4_4?", + "D_700889863_4_4?", + "D_990114799_4_4?", + "D_195363361_4_4?", + "D_216840563_4_4?", + "D_514034680_4_4?", + "D_247160067_4_4?", + "D_312545873_4_4?", + "SIBSUM_4_4", + "D_406098499_5_5?", + "D_579563781_5_5?", + "D_807431780_5_5?", + "D_589588769_5_5?", + "D_890637099_5_5?", + "D_869387390_5_5?", + "D_537137982_5_5?", + "D_607773106_5_5?", + "D_578895128_5_5?", + "D_384881609_5_5?", + "D_483975329_5_5?", + "D_570279754_5_5?", + "D_907590067_5_5?", + "D_860112841_5_5?", + "D_158354252_5_5?", + "D_654594205_5_5?", + "D_550722030_5_5?", + "D_142912472_5_5?", + "D_158409298_5_5?", + "D_529744595_5_5?", + "D_315987564_5_5?", + "D_852278004_5_5?", + "D_391972881_5_5?", + "D_259089008_5_5?", + "D_209771602_5_5?", + "D_682651189_5_5?", + "D_750994269_5_5?", + "D_700889863_5_5?", + "D_990114799_5_5?", + "D_195363361_5_5?", + "D_216840563_5_5?", + "D_514034680_5_5?", + "D_247160067_5_5?", + "D_312545873_5_5?", + "SIBSUM_5_5", + "D_406098499_6_6?", + "D_579563781_6_6?", + "D_807431780_6_6?", + "D_589588769_6_6?", + "D_890637099_6_6?", + "D_869387390_6_6?", + "D_537137982_6_6?", + "D_607773106_6_6?", + "D_578895128_6_6?", + "D_384881609_6_6?", + "D_483975329_6_6?", + "D_570279754_6_6?", + "D_907590067_6_6?", + "D_860112841_6_6?", + "D_158354252_6_6?", + "D_654594205_6_6?", + "D_550722030_6_6?", + "D_142912472_6_6?", + "D_158409298_6_6?", + "D_529744595_6_6?", + "D_315987564_6_6?", + "D_852278004_6_6?", + "D_391972881_6_6?", + "D_259089008_6_6?", + "D_209771602_6_6?", + "D_682651189_6_6?", + "D_750994269_6_6?", + "D_700889863_6_6?", + "D_990114799_6_6?", + "D_195363361_6_6?", + "D_216840563_6_6?", + "D_514034680_6_6?", + "D_247160067_6_6?", + "D_312545873_6_6?", + "SIBSUM_6_6", + "D_406098499_7_7?", + "D_579563781_7_7?", + "D_807431780_7_7?", + "D_589588769_7_7?", + "D_890637099_7_7?", + "D_869387390_7_7?", + "D_537137982_7_7?", + "D_607773106_7_7?", + "D_578895128_7_7?", + "D_384881609_7_7?", + "D_483975329_7_7?", + "D_570279754_7_7?", + "D_907590067_7_7?", + "D_860112841_7_7?", + "D_158354252_7_7?", + "D_654594205_7_7?", + "D_550722030_7_7?", + "D_142912472_7_7?", + "D_158409298_7_7?", + "D_529744595_7_7?", + "D_315987564_7_7?", + "D_852278004_7_7?", + "D_391972881_7_7?", + "D_259089008_7_7?", + "D_209771602_7_7?", + "D_682651189_7_7?", + "D_750994269_7_7?", + "D_700889863_7_7?", + "D_990114799_7_7?", + "D_195363361_7_7?", + "D_216840563_7_7?", + "D_514034680_7_7?", + "D_247160067_7_7?", + "D_312545873_7_7?", + "SIBSUM_7_7", + "D_406098499_8_8?", + "D_579563781_8_8?", + "D_807431780_8_8?", + "D_589588769_8_8?", + "D_890637099_8_8?", + "D_869387390_8_8?", + "D_537137982_8_8?", + "D_607773106_8_8?", + "D_578895128_8_8?", + "D_384881609_8_8?", + "D_483975329_8_8?", + "D_570279754_8_8?", + "D_907590067_8_8?", + "D_860112841_8_8?", + "D_158354252_8_8?", + "D_654594205_8_8?", + "D_550722030_8_8?", + "D_142912472_8_8?", + "D_158409298_8_8?", + "D_529744595_8_8?", + "D_315987564_8_8?", + "D_852278004_8_8?", + "D_391972881_8_8?", + "D_259089008_8_8?", + "D_209771602_8_8?", + "D_682651189_8_8?", + "D_750994269_8_8?", + "D_700889863_8_8?", + "D_990114799_8_8?", + "D_195363361_8_8?", + "D_216840563_8_8?", + "D_514034680_8_8?", + "D_247160067_8_8?", + "D_312545873_8_8?", + "SIBSUM_8_8", + "D_406098499_9_9?", + "D_579563781_9_9?", + "D_807431780_9_9?", + "D_589588769_9_9?", + "D_890637099_9_9?", + "D_869387390_9_9?", + "D_537137982_9_9?", + "D_607773106_9_9?", + "D_578895128_9_9?", + "D_384881609_9_9?", + "D_483975329_9_9?", + "D_570279754_9_9?", + "D_907590067_9_9?", + "D_860112841_9_9?", + "D_158354252_9_9?", + "D_654594205_9_9?", + "D_550722030_9_9?", + "D_142912472_9_9?", + "D_158409298_9_9?", + "D_529744595_9_9?", + "D_315987564_9_9?", + "D_852278004_9_9?", + "D_391972881_9_9?", + "D_259089008_9_9?", + "D_209771602_9_9?", + "D_682651189_9_9?", + "D_750994269_9_9?", + "D_700889863_9_9?", + "D_990114799_9_9?", + "D_195363361_9_9?", + "D_216840563_9_9?", + "D_514034680_9_9?", + "D_247160067_9_9?", + "D_312545873_9_9?", + "SIBSUM_9_9", + "D_406098499_10_10?", + "D_579563781_10_10?", + "D_807431780_10_10?", + "D_589588769_10_10?", + "D_890637099_10_10?", + "D_869387390_10_10?", + "D_537137982_10_10?", + "D_607773106_10_10?", + "D_578895128_10_10?", + "D_384881609_10_10?", + "D_483975329_10_10?", + "D_570279754_10_10?", + "D_907590067_10_10?", + "D_860112841_10_10?", + "D_158354252_10_10?", + "D_654594205_10_10?", + "D_550722030_10_10?", + "D_142912472_10_10?", + "D_158409298_10_10?", + "D_529744595_10_10?", + "D_315987564_10_10?", + "D_852278004_10_10?", + "D_391972881_10_10?", + "D_259089008_10_10?", + "D_209771602_10_10?", + "D_682651189_10_10?", + "D_750994269_10_10?", + "D_700889863_10_10?", + "D_990114799_10_10?", + "D_195363361_10_10?", + "D_216840563_10_10?", + "D_514034680_10_10?", + "D_247160067_10_10?", + "D_312545873_10_10?", + "SIBSUM_10_10", + "D_406098499_11_11?", + "D_579563781_11_11?", + "D_807431780_11_11?", + "D_589588769_11_11?", + "D_890637099_11_11?", + "D_869387390_11_11?", + "D_537137982_11_11?", + "D_607773106_11_11?", + "D_578895128_11_11?", + "D_384881609_11_11?", + "D_483975329_11_11?", + "D_570279754_11_11?", + "D_907590067_11_11?", + "D_860112841_11_11?", + "D_158354252_11_11?", + "D_654594205_11_11?", + "D_550722030_11_11?", + "D_142912472_11_11?", + "D_158409298_11_11?", + "D_529744595_11_11?", + "D_315987564_11_11?", + "D_852278004_11_11?", + "D_391972881_11_11?", + "D_259089008_11_11?", + "D_209771602_11_11?", + "D_682651189_11_11?", + "D_750994269_11_11?", + "D_700889863_11_11?", + "D_990114799_11_11?", + "D_195363361_11_11?", + "D_216840563_11_11?", + "D_514034680_11_11?", + "D_247160067_11_11?", + "D_312545873_11_11?", + "SIBSUM_11_11", + "D_406098499_12_12?", + "D_579563781_12_12?", + "D_807431780_12_12?", + "D_589588769_12_12?", + "D_890637099_12_12?", + "D_869387390_12_12?", + "D_537137982_12_12?", + "D_607773106_12_12?", + "D_578895128_12_12?", + "D_384881609_12_12?", + "D_483975329_12_12?", + "D_570279754_12_12?", + "D_907590067_12_12?", + "D_860112841_12_12?", + "D_158354252_12_12?", + "D_654594205_12_12?", + "D_550722030_12_12?", + "D_142912472_12_12?", + "D_158409298_12_12?", + "D_529744595_12_12?", + "D_315987564_12_12?", + "D_852278004_12_12?", + "D_391972881_12_12?", + "D_259089008_12_12?", + "D_209771602_12_12?", + "D_682651189_12_12?", + "D_750994269_12_12?", + "D_700889863_12_12?", + "D_990114799_12_12?", + "D_195363361_12_12?", + "D_216840563_12_12?", + "D_514034680_12_12?", + "D_247160067_12_12?", + "D_312545873_12_12?", + "SIBSUM_12_12", + "D_406098499_13_13?", + "D_579563781_13_13?", + "D_807431780_13_13?", + "D_589588769_13_13?", + "D_890637099_13_13?", + "D_869387390_13_13?", + "D_537137982_13_13?", + "D_607773106_13_13?", + "D_578895128_13_13?", + "D_384881609_13_13?", + "D_483975329_13_13?", + "D_570279754_13_13?", + "D_907590067_13_13?", + "D_860112841_13_13?", + "D_158354252_13_13?", + "D_654594205_13_13?", + "D_550722030_13_13?", + "D_142912472_13_13?", + "D_158409298_13_13?", + "D_529744595_13_13?", + "D_315987564_13_13?", + "D_852278004_13_13?", + "D_391972881_13_13?", + "D_259089008_13_13?", + "D_209771602_13_13?", + "D_682651189_13_13?", + "D_750994269_13_13?", + "D_700889863_13_13?", + "D_990114799_13_13?", + "D_195363361_13_13?", + "D_216840563_13_13?", + "D_514034680_13_13?", + "D_247160067_13_13?", + "D_312545873_13_13?", + "SIBSUM_13_13", + "D_406098499_14_14?", + "D_579563781_14_14?", + "D_807431780_14_14?", + "D_589588769_14_14?", + "D_890637099_14_14?", + "D_869387390_14_14?", + "D_537137982_14_14?", + "D_607773106_14_14?", + "D_578895128_14_14?", + "D_384881609_14_14?", + "D_483975329_14_14?", + "D_570279754_14_14?", + "D_907590067_14_14?", + "D_860112841_14_14?", + "D_158354252_14_14?", + "D_654594205_14_14?", + "D_550722030_14_14?", + "D_142912472_14_14?", + "D_158409298_14_14?", + "D_529744595_14_14?", + "D_315987564_14_14?", + "D_852278004_14_14?", + "D_391972881_14_14?", + "D_259089008_14_14?", + "D_209771602_14_14?", + "D_682651189_14_14?", + "D_750994269_14_14?", + "D_700889863_14_14?", + "D_990114799_14_14?", + "D_195363361_14_14?", + "D_216840563_14_14?", + "D_514034680_14_14?", + "D_247160067_14_14?", + "D_312545873_14_14?", + "SIBSUM_14_14", + "D_406098499_15_15?", + "D_579563781_15_15?", + "D_807431780_15_15?", + "D_589588769_15_15?", + "D_890637099_15_15?", + "D_869387390_15_15?", + "D_537137982_15_15?", + "D_607773106_15_15?", + "D_578895128_15_15?", + "D_384881609_15_15?", + "D_483975329_15_15?", + "D_570279754_15_15?", + "D_907590067_15_15?", + "D_860112841_15_15?", + "D_158354252_15_15?", + "D_654594205_15_15?", + "D_550722030_15_15?", + "D_142912472_15_15?", + "D_158409298_15_15?", + "D_529744595_15_15?", + "D_315987564_15_15?", + "D_852278004_15_15?", + "D_391972881_15_15?", + "D_259089008_15_15?", + "D_209771602_15_15?", + "D_682651189_15_15?", + "D_750994269_15_15?", + "D_700889863_15_15?", + "D_990114799_15_15?", + "D_195363361_15_15?", + "D_216840563_15_15?", + "D_514034680_15_15?", + "D_247160067_15_15?", + "D_312545873_15_15?", + "SIBSUM_15_15", + "D_406098499_16_16?", + "D_579563781_16_16?", + "D_807431780_16_16?", + "D_589588769_16_16?", + "D_890637099_16_16?", + "D_869387390_16_16?", + "D_537137982_16_16?", + "D_607773106_16_16?", + "D_578895128_16_16?", + "D_384881609_16_16?", + "D_483975329_16_16?", + "D_570279754_16_16?", + "D_907590067_16_16?", + "D_860112841_16_16?", + "D_158354252_16_16?", + "D_654594205_16_16?", + "D_550722030_16_16?", + "D_142912472_16_16?", + "D_158409298_16_16?", + "D_529744595_16_16?", + "D_315987564_16_16?", + "D_852278004_16_16?", + "D_391972881_16_16?", + "D_259089008_16_16?", + "D_209771602_16_16?", + "D_682651189_16_16?", + "D_750994269_16_16?", + "D_700889863_16_16?", + "D_990114799_16_16?", + "D_195363361_16_16?", + "D_216840563_16_16?", + "D_514034680_16_16?", + "D_247160067_16_16?", + "D_312545873_16_16?", + "SIBSUM_16_16", + "D_406098499_17_17?", + "D_579563781_17_17?", + "D_807431780_17_17?", + "D_589588769_17_17?", + "D_890637099_17_17?", + "D_869387390_17_17?", + "D_537137982_17_17?", + "D_607773106_17_17?", + "D_578895128_17_17?", + "D_384881609_17_17?", + "D_483975329_17_17?", + "D_570279754_17_17?", + "D_907590067_17_17?", + "D_860112841_17_17?", + "D_158354252_17_17?", + "D_654594205_17_17?", + "D_550722030_17_17?", + "D_142912472_17_17?", + "D_158409298_17_17?", + "D_529744595_17_17?", + "D_315987564_17_17?", + "D_852278004_17_17?", + "D_391972881_17_17?", + "D_259089008_17_17?", + "D_209771602_17_17?", + "D_682651189_17_17?", + "D_750994269_17_17?", + "D_700889863_17_17?", + "D_990114799_17_17?", + "D_195363361_17_17?", + "D_216840563_17_17?", + "D_514034680_17_17?", + "D_247160067_17_17?", + "D_312545873_17_17?", + "SIBSUM_17_17", + "D_406098499_18_18?", + "D_579563781_18_18?", + "D_807431780_18_18?", + "D_589588769_18_18?", + "D_890637099_18_18?", + "D_869387390_18_18?", + "D_537137982_18_18?", + "D_607773106_18_18?", + "D_578895128_18_18?", + "D_384881609_18_18?", + "D_483975329_18_18?", + "D_570279754_18_18?", + "D_907590067_18_18?", + "D_860112841_18_18?", + "D_158354252_18_18?", + "D_654594205_18_18?", + "D_550722030_18_18?", + "D_142912472_18_18?", + "D_158409298_18_18?", + "D_529744595_18_18?", + "D_315987564_18_18?", + "D_852278004_18_18?", + "D_391972881_18_18?", + "D_259089008_18_18?", + "D_209771602_18_18?", + "D_682651189_18_18?", + "D_750994269_18_18?", + "D_700889863_18_18?", + "D_990114799_18_18?", + "D_195363361_18_18?", + "D_216840563_18_18?", + "D_514034680_18_18?", + "D_247160067_18_18?", + "D_312545873_18_18?", + "SIBSUM_18_18", + "D_406098499_19_19?", + "D_579563781_19_19?", + "D_807431780_19_19?", + "D_589588769_19_19?", + "D_890637099_19_19?", + "D_869387390_19_19?", + "D_537137982_19_19?", + "D_607773106_19_19?", + "D_578895128_19_19?", + "D_384881609_19_19?", + "D_483975329_19_19?", + "D_570279754_19_19?", + "D_907590067_19_19?", + "D_860112841_19_19?", + "D_158354252_19_19?", + "D_654594205_19_19?", + "D_550722030_19_19?", + "D_142912472_19_19?", + "D_158409298_19_19?", + "D_529744595_19_19?", + "D_315987564_19_19?", + "D_852278004_19_19?", + "D_391972881_19_19?", + "D_259089008_19_19?", + "D_209771602_19_19?", + "D_682651189_19_19?", + "D_750994269_19_19?", + "D_700889863_19_19?", + "D_990114799_19_19?", + "D_195363361_19_19?", + "D_216840563_19_19?", + "D_514034680_19_19?", + "D_247160067_19_19?", + "D_312545873_19_19?", + "SIBSUM_19_19", + "D_406098499_20_20?", + "D_579563781_20_20?", + "D_807431780_20_20?", + "D_589588769_20_20?", + "D_890637099_20_20?", + "D_869387390_20_20?", + "D_537137982_20_20?", + "D_607773106_20_20?", + "D_578895128_20_20?", + "D_384881609_20_20?", + "D_483975329_20_20?", + "D_570279754_20_20?", + "D_907590067_20_20?", + "D_860112841_20_20?", + "D_158354252_20_20?", + "D_654594205_20_20?", + "D_550722030_20_20?", + "D_142912472_20_20?", + "D_158409298_20_20?", + "D_529744595_20_20?", + "D_315987564_20_20?", + "D_852278004_20_20?", + "D_391972881_20_20?", + "D_259089008_20_20?", + "D_209771602_20_20?", + "D_682651189_20_20?", + "D_750994269_20_20?", + "D_700889863_20_20?", + "D_990114799_20_20?", + "D_195363361_20_20?", + "D_216840563_20_20?", + "D_514034680_20_20?", + "D_247160067_20_20?", + "D_312545873_20_20?", + "SIBSUM_20_20", + "D_406098499_21_21?", + "D_579563781_21_21?", + "D_807431780_21_21?", + "D_589588769_21_21?", + "D_890637099_21_21?", + "D_869387390_21_21?", + "D_537137982_21_21?", + "D_607773106_21_21?", + "D_578895128_21_21?", + "D_384881609_21_21?", + "D_483975329_21_21?", + "D_570279754_21_21?", + "D_907590067_21_21?", + "D_860112841_21_21?", + "D_158354252_21_21?", + "D_654594205_21_21?", + "D_550722030_21_21?", + "D_142912472_21_21?", + "D_158409298_21_21?", + "D_529744595_21_21?", + "D_315987564_21_21?", + "D_852278004_21_21?", + "D_391972881_21_21?", + "D_259089008_21_21?", + "D_209771602_21_21?", + "D_682651189_21_21?", + "D_750994269_21_21?", + "D_700889863_21_21?", + "D_990114799_21_21?", + "D_195363361_21_21?", + "D_216840563_21_21?", + "D_514034680_21_21?", + "D_247160067_21_21?", + "D_312545873_21_21?", + "SIBSUM_21_21", + "D_406098499_22_22?", + "D_579563781_22_22?", + "D_807431780_22_22?", + "D_589588769_22_22?", + "D_890637099_22_22?", + "D_869387390_22_22?", + "D_537137982_22_22?", + "D_607773106_22_22?", + "D_578895128_22_22?", + "D_384881609_22_22?", + "D_483975329_22_22?", + "D_570279754_22_22?", + "D_907590067_22_22?", + "D_860112841_22_22?", + "D_158354252_22_22?", + "D_654594205_22_22?", + "D_550722030_22_22?", + "D_142912472_22_22?", + "D_158409298_22_22?", + "D_529744595_22_22?", + "D_315987564_22_22?", + "D_852278004_22_22?", + "D_391972881_22_22?", + "D_259089008_22_22?", + "D_209771602_22_22?", + "D_682651189_22_22?", + "D_750994269_22_22?", + "D_700889863_22_22?", + "D_990114799_22_22?", + "D_195363361_22_22?", + "D_216840563_22_22?", + "D_514034680_22_22?", + "D_247160067_22_22?", + "D_312545873_22_22?", + "SIBSUM_22_22", + "D_406098499_23_23?", + "D_579563781_23_23?", + "D_807431780_23_23?", + "D_589588769_23_23?", + "D_890637099_23_23?", + "D_869387390_23_23?", + "D_537137982_23_23?", + "D_607773106_23_23?", + "D_578895128_23_23?", + "D_384881609_23_23?", + "D_483975329_23_23?", + "D_570279754_23_23?", + "D_907590067_23_23?", + "D_860112841_23_23?", + "D_158354252_23_23?", + "D_654594205_23_23?", + "D_550722030_23_23?", + "D_142912472_23_23?", + "D_158409298_23_23?", + "D_529744595_23_23?", + "D_315987564_23_23?", + "D_852278004_23_23?", + "D_391972881_23_23?", + "D_259089008_23_23?", + "D_209771602_23_23?", + "D_682651189_23_23?", + "D_750994269_23_23?", + "D_700889863_23_23?", + "D_990114799_23_23?", + "D_195363361_23_23?", + "D_216840563_23_23?", + "D_514034680_23_23?", + "D_247160067_23_23?", + "D_312545873_23_23?", + "SIBSUM_23_23", + "D_406098499_24_24?", + "D_579563781_24_24?", + "D_807431780_24_24?", + "D_589588769_24_24?", + "D_890637099_24_24?", + "D_869387390_24_24?", + "D_537137982_24_24?", + "D_607773106_24_24?", + "D_578895128_24_24?", + "D_384881609_24_24?", + "D_483975329_24_24?", + "D_570279754_24_24?", + "D_907590067_24_24?", + "D_860112841_24_24?", + "D_158354252_24_24?", + "D_654594205_24_24?", + "D_550722030_24_24?", + "D_142912472_24_24?", + "D_158409298_24_24?", + "D_529744595_24_24?", + "D_315987564_24_24?", + "D_852278004_24_24?", + "D_391972881_24_24?", + "D_259089008_24_24?", + "D_209771602_24_24?", + "D_682651189_24_24?", + "D_750994269_24_24?", + "D_700889863_24_24?", + "D_990114799_24_24?", + "D_195363361_24_24?", + "D_216840563_24_24?", + "D_514034680_24_24?", + "D_247160067_24_24?", + "D_312545873_24_24?", + "SIBSUM_24_24", + "D_406098499_25_25?", + "D_579563781_25_25?", + "D_807431780_25_25?", + "D_589588769_25_25?", + "D_890637099_25_25?", + "D_869387390_25_25?", + "D_537137982_25_25?", + "D_607773106_25_25?", + "D_578895128_25_25?", + "D_384881609_25_25?", + "D_483975329_25_25?", + "D_570279754_25_25?", + "D_907590067_25_25?", + "D_860112841_25_25?", + "D_158354252_25_25?", + "D_654594205_25_25?", + "D_550722030_25_25?", + "D_142912472_25_25?", + "D_158409298_25_25?", + "D_529744595_25_25?", + "D_315987564_25_25?", + "D_852278004_25_25?", + "D_391972881_25_25?", + "D_259089008_25_25?", + "D_209771602_25_25?", + "D_682651189_25_25?", + "D_750994269_25_25?", + "D_700889863_25_25?", + "D_990114799_25_25?", + "D_195363361_25_25?", + "D_216840563_25_25?", + "D_514034680_25_25?", + "D_247160067_25_25?", + "D_312545873_25_25?", + "SIBSUM_25_25", + "END_OF_LOOP", + "CHILD", + "D_446999144!", + "CHILDCONFIRM", + "D_714001034_1_1?", + "D_887697329_1_1?", + "D_473529484_1_1?", + "D_873968217_1_1?", + "D_418392907_1_1?", + "D_640010727_1_1?", + "D_236590500_1_1?", + "D_718867914_1_1?", + "D_812370563_1_1?", + "D_900939817_1_1?", + "D_938150507_1_1?", + "D_601211723_1_1?", + "D_861788020_1_1?", + "D_204425387_1_1?", + "D_558929585_1_1?", + "D_233764880_1_1?", + "D_905145893_1_1?", + "D_473190270_1_1?", + "D_483735587_1_1?", + "D_331759900_1_1?", + "D_513077276_1_1?", + "D_519974530_1_1?", + "D_907776050_1_1?", + "D_271684775_1_1?", + "D_252160589_1_1?", + "D_774774759_1_1?", + "D_127257956_1_1?", + "D_496917282_1_1?", + "D_908129316_1_1?", + "D_795003496_1_1?", + "D_969177591_1_1?", + "D_116065851_1_1?", + "D_278159347_1_1?", + "D_845219872_1_1?", + "CHILDSUM_1_1", + "D_714001034_2_2?", + "D_887697329_2_2?", + "D_473529484_2_2?", + "D_873968217_2_2?", + "D_418392907_2_2?", + "D_640010727_2_2?", + "D_236590500_2_2?", + "D_718867914_2_2?", + "D_812370563_2_2?", + "D_900939817_2_2?", + "D_938150507_2_2?", + "D_601211723_2_2?", + "D_861788020_2_2?", + "D_204425387_2_2?", + "D_558929585_2_2?", + "D_233764880_2_2?", + "D_905145893_2_2?", + "D_473190270_2_2?", + "D_483735587_2_2?", + "D_331759900_2_2?", + "D_513077276_2_2?", + "D_519974530_2_2?", + "D_907776050_2_2?", + "D_271684775_2_2?", + "D_252160589_2_2?", + "D_774774759_2_2?", + "D_127257956_2_2?", + "D_496917282_2_2?", + "D_908129316_2_2?", + "D_795003496_2_2?", + "D_969177591_2_2?", + "D_116065851_2_2?", + "D_278159347_2_2?", + "D_845219872_2_2?", + "CHILDSUM_2_2", + "D_714001034_3_3?", + "D_887697329_3_3?", + "D_473529484_3_3?", + "D_873968217_3_3?", + "D_418392907_3_3?", + "D_640010727_3_3?", + "D_236590500_3_3?", + "D_718867914_3_3?", + "D_812370563_3_3?", + "D_900939817_3_3?", + "D_938150507_3_3?", + "D_601211723_3_3?", + "D_861788020_3_3?", + "D_204425387_3_3?", + "D_558929585_3_3?", + "D_233764880_3_3?", + "D_905145893_3_3?", + "D_473190270_3_3?", + "D_483735587_3_3?", + "D_331759900_3_3?", + "D_513077276_3_3?", + "D_519974530_3_3?", + "D_907776050_3_3?", + "D_271684775_3_3?", + "D_252160589_3_3?", + "D_774774759_3_3?", + "D_127257956_3_3?", + "D_496917282_3_3?", + "D_908129316_3_3?", + "D_795003496_3_3?", + "D_969177591_3_3?", + "D_116065851_3_3?", + "D_278159347_3_3?", + "D_845219872_3_3?", + "CHILDSUM_3_3", + "D_714001034_4_4?", + "D_887697329_4_4?", + "D_473529484_4_4?", + "D_873968217_4_4?", + "D_418392907_4_4?", + "D_640010727_4_4?", + "D_236590500_4_4?", + "D_718867914_4_4?", + "D_812370563_4_4?", + "D_900939817_4_4?", + "D_938150507_4_4?", + "D_601211723_4_4?", + "D_861788020_4_4?", + "D_204425387_4_4?", + "D_558929585_4_4?", + "D_233764880_4_4?", + "D_905145893_4_4?", + "D_473190270_4_4?", + "D_483735587_4_4?", + "D_331759900_4_4?", + "D_513077276_4_4?", + "D_519974530_4_4?", + "D_907776050_4_4?", + "D_271684775_4_4?", + "D_252160589_4_4?", + "D_774774759_4_4?", + "D_127257956_4_4?", + "D_496917282_4_4?", + "D_908129316_4_4?", + "D_795003496_4_4?", + "D_969177591_4_4?", + "D_116065851_4_4?", + "D_278159347_4_4?", + "D_845219872_4_4?", + "CHILDSUM_4_4", + "D_714001034_5_5?", + "D_887697329_5_5?", + "D_473529484_5_5?", + "D_873968217_5_5?", + "D_418392907_5_5?", + "D_640010727_5_5?", + "D_236590500_5_5?", + "D_718867914_5_5?", + "D_812370563_5_5?", + "D_900939817_5_5?", + "D_938150507_5_5?", + "D_601211723_5_5?", + "D_861788020_5_5?", + "D_204425387_5_5?", + "D_558929585_5_5?", + "D_233764880_5_5?", + "D_905145893_5_5?", + "D_473190270_5_5?", + "D_483735587_5_5?", + "D_331759900_5_5?", + "D_513077276_5_5?", + "D_519974530_5_5?", + "D_907776050_5_5?", + "D_271684775_5_5?", + "D_252160589_5_5?", + "D_774774759_5_5?", + "D_127257956_5_5?", + "D_496917282_5_5?", + "D_908129316_5_5?", + "D_795003496_5_5?", + "D_969177591_5_5?", + "D_116065851_5_5?", + "D_278159347_5_5?", + "D_845219872_5_5?", + "CHILDSUM_5_5", + "D_714001034_6_6?", + "D_887697329_6_6?", + "D_473529484_6_6?", + "D_873968217_6_6?", + "D_418392907_6_6?", + "D_640010727_6_6?", + "D_236590500_6_6?", + "D_718867914_6_6?", + "D_812370563_6_6?", + "D_900939817_6_6?", + "D_938150507_6_6?", + "D_601211723_6_6?", + "D_861788020_6_6?", + "D_204425387_6_6?", + "D_558929585_6_6?", + "D_233764880_6_6?", + "D_905145893_6_6?", + "D_473190270_6_6?", + "D_483735587_6_6?", + "D_331759900_6_6?", + "D_513077276_6_6?", + "D_519974530_6_6?", + "D_907776050_6_6?", + "D_271684775_6_6?", + "D_252160589_6_6?", + "D_774774759_6_6?", + "D_127257956_6_6?", + "D_496917282_6_6?", + "D_908129316_6_6?", + "D_795003496_6_6?", + "D_969177591_6_6?", + "D_116065851_6_6?", + "D_278159347_6_6?", + "D_845219872_6_6?", + "CHILDSUM_6_6", + "D_714001034_7_7?", + "D_887697329_7_7?", + "D_473529484_7_7?", + "D_873968217_7_7?", + "D_418392907_7_7?", + "D_640010727_7_7?", + "D_236590500_7_7?", + "D_718867914_7_7?", + "D_812370563_7_7?", + "D_900939817_7_7?", + "D_938150507_7_7?", + "D_601211723_7_7?", + "D_861788020_7_7?", + "D_204425387_7_7?", + "D_558929585_7_7?", + "D_233764880_7_7?", + "D_905145893_7_7?", + "D_473190270_7_7?", + "D_483735587_7_7?", + "D_331759900_7_7?", + "D_513077276_7_7?", + "D_519974530_7_7?", + "D_907776050_7_7?", + "D_271684775_7_7?", + "D_252160589_7_7?", + "D_774774759_7_7?", + "D_127257956_7_7?", + "D_496917282_7_7?", + "D_908129316_7_7?", + "D_795003496_7_7?", + "D_969177591_7_7?", + "D_116065851_7_7?", + "D_278159347_7_7?", + "D_845219872_7_7?", + "CHILDSUM_7_7", + "D_714001034_8_8?", + "D_887697329_8_8?", + "D_473529484_8_8?", + "D_873968217_8_8?", + "D_418392907_8_8?", + "D_640010727_8_8?", + "D_236590500_8_8?", + "D_718867914_8_8?", + "D_812370563_8_8?", + "D_900939817_8_8?", + "D_938150507_8_8?", + "D_601211723_8_8?", + "D_861788020_8_8?", + "D_204425387_8_8?", + "D_558929585_8_8?", + "D_233764880_8_8?", + "D_905145893_8_8?", + "D_473190270_8_8?", + "D_483735587_8_8?", + "D_331759900_8_8?", + "D_513077276_8_8?", + "D_519974530_8_8?", + "D_907776050_8_8?", + "D_271684775_8_8?", + "D_252160589_8_8?", + "D_774774759_8_8?", + "D_127257956_8_8?", + "D_496917282_8_8?", + "D_908129316_8_8?", + "D_795003496_8_8?", + "D_969177591_8_8?", + "D_116065851_8_8?", + "D_278159347_8_8?", + "D_845219872_8_8?", + "CHILDSUM_8_8", + "D_714001034_9_9?", + "D_887697329_9_9?", + "D_473529484_9_9?", + "D_873968217_9_9?", + "D_418392907_9_9?", + "D_640010727_9_9?", + "D_236590500_9_9?", + "D_718867914_9_9?", + "D_812370563_9_9?", + "D_900939817_9_9?", + "D_938150507_9_9?", + "D_601211723_9_9?", + "D_861788020_9_9?", + "D_204425387_9_9?", + "D_558929585_9_9?", + "D_233764880_9_9?", + "D_905145893_9_9?", + "D_473190270_9_9?", + "D_483735587_9_9?", + "D_331759900_9_9?", + "D_513077276_9_9?", + "D_519974530_9_9?", + "D_907776050_9_9?", + "D_271684775_9_9?", + "D_252160589_9_9?", + "D_774774759_9_9?", + "D_127257956_9_9?", + "D_496917282_9_9?", + "D_908129316_9_9?", + "D_795003496_9_9?", + "D_969177591_9_9?", + "D_116065851_9_9?", + "D_278159347_9_9?", + "D_845219872_9_9?", + "CHILDSUM_9_9", + "D_714001034_10_10?", + "D_887697329_10_10?", + "D_473529484_10_10?", + "D_873968217_10_10?", + "D_418392907_10_10?", + "D_640010727_10_10?", + "D_236590500_10_10?", + "D_718867914_10_10?", + "D_812370563_10_10?", + "D_900939817_10_10?", + "D_938150507_10_10?", + "D_601211723_10_10?", + "D_861788020_10_10?", + "D_204425387_10_10?", + "D_558929585_10_10?", + "D_233764880_10_10?", + "D_905145893_10_10?", + "D_473190270_10_10?", + "D_483735587_10_10?", + "D_331759900_10_10?", + "D_513077276_10_10?", + "D_519974530_10_10?", + "D_907776050_10_10?", + "D_271684775_10_10?", + "D_252160589_10_10?", + "D_774774759_10_10?", + "D_127257956_10_10?", + "D_496917282_10_10?", + "D_908129316_10_10?", + "D_795003496_10_10?", + "D_969177591_10_10?", + "D_116065851_10_10?", + "D_278159347_10_10?", + "D_845219872_10_10?", + "CHILDSUM_10_10", + "D_714001034_11_11?", + "D_887697329_11_11?", + "D_473529484_11_11?", + "D_873968217_11_11?", + "D_418392907_11_11?", + "D_640010727_11_11?", + "D_236590500_11_11?", + "D_718867914_11_11?", + "D_812370563_11_11?", + "D_900939817_11_11?", + "D_938150507_11_11?", + "D_601211723_11_11?", + "D_861788020_11_11?", + "D_204425387_11_11?", + "D_558929585_11_11?", + "D_233764880_11_11?", + "D_905145893_11_11?", + "D_473190270_11_11?", + "D_483735587_11_11?", + "D_331759900_11_11?", + "D_513077276_11_11?", + "D_519974530_11_11?", + "D_907776050_11_11?", + "D_271684775_11_11?", + "D_252160589_11_11?", + "D_774774759_11_11?", + "D_127257956_11_11?", + "D_496917282_11_11?", + "D_908129316_11_11?", + "D_795003496_11_11?", + "D_969177591_11_11?", + "D_116065851_11_11?", + "D_278159347_11_11?", + "D_845219872_11_11?", + "CHILDSUM_11_11", + "D_714001034_12_12?", + "D_887697329_12_12?", + "D_473529484_12_12?", + "D_873968217_12_12?", + "D_418392907_12_12?", + "D_640010727_12_12?", + "D_236590500_12_12?", + "D_718867914_12_12?", + "D_812370563_12_12?", + "D_900939817_12_12?", + "D_938150507_12_12?", + "D_601211723_12_12?", + "D_861788020_12_12?", + "D_204425387_12_12?", + "D_558929585_12_12?", + "D_233764880_12_12?", + "D_905145893_12_12?", + "D_473190270_12_12?", + "D_483735587_12_12?", + "D_331759900_12_12?", + "D_513077276_12_12?", + "D_519974530_12_12?", + "D_907776050_12_12?", + "D_271684775_12_12?", + "D_252160589_12_12?", + "D_774774759_12_12?", + "D_127257956_12_12?", + "D_496917282_12_12?", + "D_908129316_12_12?", + "D_795003496_12_12?", + "D_969177591_12_12?", + "D_116065851_12_12?", + "D_278159347_12_12?", + "D_845219872_12_12?", + "CHILDSUM_12_12", + "D_714001034_13_13?", + "D_887697329_13_13?", + "D_473529484_13_13?", + "D_873968217_13_13?", + "D_418392907_13_13?", + "D_640010727_13_13?", + "D_236590500_13_13?", + "D_718867914_13_13?", + "D_812370563_13_13?", + "D_900939817_13_13?", + "D_938150507_13_13?", + "D_601211723_13_13?", + "D_861788020_13_13?", + "D_204425387_13_13?", + "D_558929585_13_13?", + "D_233764880_13_13?", + "D_905145893_13_13?", + "D_473190270_13_13?", + "D_483735587_13_13?", + "D_331759900_13_13?", + "D_513077276_13_13?", + "D_519974530_13_13?", + "D_907776050_13_13?", + "D_271684775_13_13?", + "D_252160589_13_13?", + "D_774774759_13_13?", + "D_127257956_13_13?", + "D_496917282_13_13?", + "D_908129316_13_13?", + "D_795003496_13_13?", + "D_969177591_13_13?", + "D_116065851_13_13?", + "D_278159347_13_13?", + "D_845219872_13_13?", + "CHILDSUM_13_13", + "D_714001034_14_14?", + "D_887697329_14_14?", + "D_473529484_14_14?", + "D_873968217_14_14?", + "D_418392907_14_14?", + "D_640010727_14_14?", + "D_236590500_14_14?", + "D_718867914_14_14?", + "D_812370563_14_14?", + "D_900939817_14_14?", + "D_938150507_14_14?", + "D_601211723_14_14?", + "D_861788020_14_14?", + "D_204425387_14_14?", + "D_558929585_14_14?", + "D_233764880_14_14?", + "D_905145893_14_14?", + "D_473190270_14_14?", + "D_483735587_14_14?", + "D_331759900_14_14?", + "D_513077276_14_14?", + "D_519974530_14_14?", + "D_907776050_14_14?", + "D_271684775_14_14?", + "D_252160589_14_14?", + "D_774774759_14_14?", + "D_127257956_14_14?", + "D_496917282_14_14?", + "D_908129316_14_14?", + "D_795003496_14_14?", + "D_969177591_14_14?", + "D_116065851_14_14?", + "D_278159347_14_14?", + "D_845219872_14_14?", + "CHILDSUM_14_14", + "D_714001034_15_15?", + "D_887697329_15_15?", + "D_473529484_15_15?", + "D_873968217_15_15?", + "D_418392907_15_15?", + "D_640010727_15_15?", + "D_236590500_15_15?", + "D_718867914_15_15?", + "D_812370563_15_15?", + "D_900939817_15_15?", + "D_938150507_15_15?", + "D_601211723_15_15?", + "D_861788020_15_15?", + "D_204425387_15_15?", + "D_558929585_15_15?", + "D_233764880_15_15?", + "D_905145893_15_15?", + "D_473190270_15_15?", + "D_483735587_15_15?", + "D_331759900_15_15?", + "D_513077276_15_15?", + "D_519974530_15_15?", + "D_907776050_15_15?", + "D_271684775_15_15?", + "D_252160589_15_15?", + "D_774774759_15_15?", + "D_127257956_15_15?", + "D_496917282_15_15?", + "D_908129316_15_15?", + "D_795003496_15_15?", + "D_969177591_15_15?", + "D_116065851_15_15?", + "D_278159347_15_15?", + "D_845219872_15_15?", + "CHILDSUM_15_15", + "D_714001034_16_16?", + "D_887697329_16_16?", + "D_473529484_16_16?", + "D_873968217_16_16?", + "D_418392907_16_16?", + "D_640010727_16_16?", + "D_236590500_16_16?", + "D_718867914_16_16?", + "D_812370563_16_16?", + "D_900939817_16_16?", + "D_938150507_16_16?", + "D_601211723_16_16?", + "D_861788020_16_16?", + "D_204425387_16_16?", + "D_558929585_16_16?", + "D_233764880_16_16?", + "D_905145893_16_16?", + "D_473190270_16_16?", + "D_483735587_16_16?", + "D_331759900_16_16?", + "D_513077276_16_16?", + "D_519974530_16_16?", + "D_907776050_16_16?", + "D_271684775_16_16?", + "D_252160589_16_16?", + "D_774774759_16_16?", + "D_127257956_16_16?", + "D_496917282_16_16?", + "D_908129316_16_16?", + "D_795003496_16_16?", + "D_969177591_16_16?", + "D_116065851_16_16?", + "D_278159347_16_16?", + "D_845219872_16_16?", + "CHILDSUM_16_16", + "D_714001034_17_17?", + "D_887697329_17_17?", + "D_473529484_17_17?", + "D_873968217_17_17?", + "D_418392907_17_17?", + "D_640010727_17_17?", + "D_236590500_17_17?", + "D_718867914_17_17?", + "D_812370563_17_17?", + "D_900939817_17_17?", + "D_938150507_17_17?", + "D_601211723_17_17?", + "D_861788020_17_17?", + "D_204425387_17_17?", + "D_558929585_17_17?", + "D_233764880_17_17?", + "D_905145893_17_17?", + "D_473190270_17_17?", + "D_483735587_17_17?", + "D_331759900_17_17?", + "D_513077276_17_17?", + "D_519974530_17_17?", + "D_907776050_17_17?", + "D_271684775_17_17?", + "D_252160589_17_17?", + "D_774774759_17_17?", + "D_127257956_17_17?", + "D_496917282_17_17?", + "D_908129316_17_17?", + "D_795003496_17_17?", + "D_969177591_17_17?", + "D_116065851_17_17?", + "D_278159347_17_17?", + "D_845219872_17_17?", + "CHILDSUM_17_17", + "D_714001034_18_18?", + "D_887697329_18_18?", + "D_473529484_18_18?", + "D_873968217_18_18?", + "D_418392907_18_18?", + "D_640010727_18_18?", + "D_236590500_18_18?", + "D_718867914_18_18?", + "D_812370563_18_18?", + "D_900939817_18_18?", + "D_938150507_18_18?", + "D_601211723_18_18?", + "D_861788020_18_18?", + "D_204425387_18_18?", + "D_558929585_18_18?", + "D_233764880_18_18?", + "D_905145893_18_18?", + "D_473190270_18_18?", + "D_483735587_18_18?", + "D_331759900_18_18?", + "D_513077276_18_18?", + "D_519974530_18_18?", + "D_907776050_18_18?", + "D_271684775_18_18?", + "D_252160589_18_18?", + "D_774774759_18_18?", + "D_127257956_18_18?", + "D_496917282_18_18?", + "D_908129316_18_18?", + "D_795003496_18_18?", + "D_969177591_18_18?", + "D_116065851_18_18?", + "D_278159347_18_18?", + "D_845219872_18_18?", + "CHILDSUM_18_18", + "D_714001034_19_19?", + "D_887697329_19_19?", + "D_473529484_19_19?", + "D_873968217_19_19?", + "D_418392907_19_19?", + "D_640010727_19_19?", + "D_236590500_19_19?", + "D_718867914_19_19?", + "D_812370563_19_19?", + "D_900939817_19_19?", + "D_938150507_19_19?", + "D_601211723_19_19?", + "D_861788020_19_19?", + "D_204425387_19_19?", + "D_558929585_19_19?", + "D_233764880_19_19?", + "D_905145893_19_19?", + "D_473190270_19_19?", + "D_483735587_19_19?", + "D_331759900_19_19?", + "D_513077276_19_19?", + "D_519974530_19_19?", + "D_907776050_19_19?", + "D_271684775_19_19?", + "D_252160589_19_19?", + "D_774774759_19_19?", + "D_127257956_19_19?", + "D_496917282_19_19?", + "D_908129316_19_19?", + "D_795003496_19_19?", + "D_969177591_19_19?", + "D_116065851_19_19?", + "D_278159347_19_19?", + "D_845219872_19_19?", + "CHILDSUM_19_19", + "D_714001034_20_20?", + "D_887697329_20_20?", + "D_473529484_20_20?", + "D_873968217_20_20?", + "D_418392907_20_20?", + "D_640010727_20_20?", + "D_236590500_20_20?", + "D_718867914_20_20?", + "D_812370563_20_20?", + "D_900939817_20_20?", + "D_938150507_20_20?", + "D_601211723_20_20?", + "D_861788020_20_20?", + "D_204425387_20_20?", + "D_558929585_20_20?", + "D_233764880_20_20?", + "D_905145893_20_20?", + "D_473190270_20_20?", + "D_483735587_20_20?", + "D_331759900_20_20?", + "D_513077276_20_20?", + "D_519974530_20_20?", + "D_907776050_20_20?", + "D_271684775_20_20?", + "D_252160589_20_20?", + "D_774774759_20_20?", + "D_127257956_20_20?", + "D_496917282_20_20?", + "D_908129316_20_20?", + "D_795003496_20_20?", + "D_969177591_20_20?", + "D_116065851_20_20?", + "D_278159347_20_20?", + "D_845219872_20_20?", + "CHILDSUM_20_20", + "D_714001034_21_21?", + "D_887697329_21_21?", + "D_473529484_21_21?", + "D_873968217_21_21?", + "D_418392907_21_21?", + "D_640010727_21_21?", + "D_236590500_21_21?", + "D_718867914_21_21?", + "D_812370563_21_21?", + "D_900939817_21_21?", + "D_938150507_21_21?", + "D_601211723_21_21?", + "D_861788020_21_21?", + "D_204425387_21_21?", + "D_558929585_21_21?", + "D_233764880_21_21?", + "D_905145893_21_21?", + "D_473190270_21_21?", + "D_483735587_21_21?", + "D_331759900_21_21?", + "D_513077276_21_21?", + "D_519974530_21_21?", + "D_907776050_21_21?", + "D_271684775_21_21?", + "D_252160589_21_21?", + "D_774774759_21_21?", + "D_127257956_21_21?", + "D_496917282_21_21?", + "D_908129316_21_21?", + "D_795003496_21_21?", + "D_969177591_21_21?", + "D_116065851_21_21?", + "D_278159347_21_21?", + "D_845219872_21_21?", + "CHILDSUM_21_21", + "D_714001034_22_22?", + "D_887697329_22_22?", + "D_473529484_22_22?", + "D_873968217_22_22?", + "D_418392907_22_22?", + "D_640010727_22_22?", + "D_236590500_22_22?", + "D_718867914_22_22?", + "D_812370563_22_22?", + "D_900939817_22_22?", + "D_938150507_22_22?", + "D_601211723_22_22?", + "D_861788020_22_22?", + "D_204425387_22_22?", + "D_558929585_22_22?", + "D_233764880_22_22?", + "D_905145893_22_22?", + "D_473190270_22_22?", + "D_483735587_22_22?", + "D_331759900_22_22?", + "D_513077276_22_22?", + "D_519974530_22_22?", + "D_907776050_22_22?", + "D_271684775_22_22?", + "D_252160589_22_22?", + "D_774774759_22_22?", + "D_127257956_22_22?", + "D_496917282_22_22?", + "D_908129316_22_22?", + "D_795003496_22_22?", + "D_969177591_22_22?", + "D_116065851_22_22?", + "D_278159347_22_22?", + "D_845219872_22_22?", + "CHILDSUM_22_22", + "D_714001034_23_23?", + "D_887697329_23_23?", + "D_473529484_23_23?", + "D_873968217_23_23?", + "D_418392907_23_23?", + "D_640010727_23_23?", + "D_236590500_23_23?", + "D_718867914_23_23?", + "D_812370563_23_23?", + "D_900939817_23_23?", + "D_938150507_23_23?", + "D_601211723_23_23?", + "D_861788020_23_23?", + "D_204425387_23_23?", + "D_558929585_23_23?", + "D_233764880_23_23?", + "D_905145893_23_23?", + "D_473190270_23_23?", + "D_483735587_23_23?", + "D_331759900_23_23?", + "D_513077276_23_23?", + "D_519974530_23_23?", + "D_907776050_23_23?", + "D_271684775_23_23?", + "D_252160589_23_23?", + "D_774774759_23_23?", + "D_127257956_23_23?", + "D_496917282_23_23?", + "D_908129316_23_23?", + "D_795003496_23_23?", + "D_969177591_23_23?", + "D_116065851_23_23?", + "D_278159347_23_23?", + "D_845219872_23_23?", + "CHILDSUM_23_23", + "D_714001034_24_24?", + "D_887697329_24_24?", + "D_473529484_24_24?", + "D_873968217_24_24?", + "D_418392907_24_24?", + "D_640010727_24_24?", + "D_236590500_24_24?", + "D_718867914_24_24?", + "D_812370563_24_24?", + "D_900939817_24_24?", + "D_938150507_24_24?", + "D_601211723_24_24?", + "D_861788020_24_24?", + "D_204425387_24_24?", + "D_558929585_24_24?", + "D_233764880_24_24?", + "D_905145893_24_24?", + "D_473190270_24_24?", + "D_483735587_24_24?", + "D_331759900_24_24?", + "D_513077276_24_24?", + "D_519974530_24_24?", + "D_907776050_24_24?", + "D_271684775_24_24?", + "D_252160589_24_24?", + "D_774774759_24_24?", + "D_127257956_24_24?", + "D_496917282_24_24?", + "D_908129316_24_24?", + "D_795003496_24_24?", + "D_969177591_24_24?", + "D_116065851_24_24?", + "D_278159347_24_24?", + "D_845219872_24_24?", + "CHILDSUM_24_24", + "D_714001034_25_25?", + "D_887697329_25_25?", + "D_473529484_25_25?", + "D_873968217_25_25?", + "D_418392907_25_25?", + "D_640010727_25_25?", + "D_236590500_25_25?", + "D_718867914_25_25?", + "D_812370563_25_25?", + "D_900939817_25_25?", + "D_938150507_25_25?", + "D_601211723_25_25?", + "D_861788020_25_25?", + "D_204425387_25_25?", + "D_558929585_25_25?", + "D_233764880_25_25?", + "D_905145893_25_25?", + "D_473190270_25_25?", + "D_483735587_25_25?", + "D_331759900_25_25?", + "D_513077276_25_25?", + "D_519974530_25_25?", + "D_907776050_25_25?", + "D_271684775_25_25?", + "D_252160589_25_25?", + "D_774774759_25_25?", + "D_127257956_25_25?", + "D_496917282_25_25?", + "D_908129316_25_25?", + "D_795003496_25_25?", + "D_969177591_25_25?", + "D_116065851_25_25?", + "D_278159347_25_25?", + "D_845219872_25_25?", + "CHILDSUM_25_25", + "END_OF_LOOP", + "SECTION5", + "D_367803647?", + "D_784967158?", + "D_613744428?", + "D_114529380?", + "D_627122657?", + "D_796828094?", + "D_761310265?", + "D_434316600?", + "D_700374192?", + "D_868232409?", + "D_739294356?", + "D_847533056?", + "D_403258164?", + "D_118061122?", + "D_518387017?", + "D_279637054?", + "D_988878019?", + "D_530742915?", + "D_233198706?", + "D_686172464?", + "D_759004335?", + "D_641651634?", + "D_431721131?", + "END" + ], + "responseControlsByType": { + "checkbox": 1725, + "number": 2874, + "radio": 883, + "text": 126, + "textarea": 2 + }, + "explicitTransitions": { + "targets": [ + "D_362270886", + "D_525535977", + "D_976808005", + "D_308014437", + "D_351657815", + "D_115616118", + "D_797626610", + "D_588212264", + "D_167101091", + "D_508846529", + "D_965917116", + "D_929240175", + "D_836712013", + "D_836890480", + "D_624479779", + "D_337278854", + "D_681229479", + "D_660358706", + "D_884793537", + "D_460062034", + "D_110652436", + "D_894259747", + "D_448722126", + "D_201449164", + "D_436333358", + "D_180961306", + "D_554782332", + "D_409622468", + "D_448476881", + "D_459764934", + "D_374697037", + "D_580911251", + "D_190347832", + "D_624777141", + "D_980403315", + "D_936039586", + "D_430472084", + "D_900541533", + "D_139655599", + "D_494032093", + "D_810918716", + "D_874046190", + "D_301679110", + "D_989016875", + "D_878094302", + "D_543728565", + "D_173101988", + "D_245861186", + "D_420423416", + "INTROSTD", + "D_915230886", + "D_530548878", + "D_469947273", + "D_685735916", + "D_954405492", + "D_103397024", + "D_931470797", + "D_922524563", + "D_978485677", + "D_523188839", + "D_725626004", + "D_846786840", + "D_423547108", + "D_852898339", + "D_467061940", + "D_619481697", + "DEPRESSINTRO", + "D_266847650", + "D_134642404", + "D_219956652", + "D_852236900", + "D_301414575", + "INTROSURG", + "D_367884741", + "D_178353079", + "D_550075233", + "D_927516732", + "D_552788665", + "D_439736294", + "D_860920332", + "D_986613440", + "D_517307064", + "D_150352141", + "D_122887481", + "D_378892977", + "D_224791140", + "D_518750011", + "D_946504570", + "D_107060069", + "D_527057404", + "D_453252072", + "D_216506024", + "D_477690298", + "D_176453768", + "D_145786416", + "D_287605131", + "D_701157499", + "D_428639167", + "D_282355641", + "D_539301647", + "D_579225381", + "D_891214661", + "D_534007917", + "D_752636038", + "D_275770221", + "D_882152987", + "D_875208305", + "D_795940097", + "D_406011084", + "D_593017220", + "D_338924834", + "D_746012894", + "D_936904328", + "D_365851428", + "D_206319592", + "D_283634623", + "D_164752169", + "FAMHISTINTRO", + "D_512167179", + "D_509933065", + "D_967093163", + "D_422714611", + "D_354326265", + "D_276353712", + "D_367374606", + "D_814510313", + "D_259397450", + "D_528753070", + "D_683981980", + "D_402548942", + "D_247198016", + "D_891925519", + "D_317093647", + "D_684692228", + "D_671347092", + "D_875221479", + "D_186170949", + "D_726451917", + "D_213545903", + "D_765903702", + "D_773974223", + "D_433604862", + "D_521369040", + "D_497311092", + "D_625249910", + "D_838564850", + "D_633764113", + "D_882263738", + "D_671308090", + "D_628078826", + "D_178774803", + "D_659784914", + "SIB", + "D_173240848", + "D_345146692", + "D_243443318", + "D_610382315", + "D_135519371", + "D_785019074", + "D_152885579", + "D_692910565", + "D_522464057", + "D_808655074", + "D_659627058", + "D_370198527", + "D_291855684", + "D_413536735", + "D_210325948", + "D_193297280", + "D_121502359", + "D_489402657", + "D_727260639", + "D_359291056", + "D_968841976", + "D_864981804", + "D_499434567", + "D_890637099_1_1", + "D_869387390_1_1", + "D_537137982_1_1", + "D_607773106_1_1", + "_CONTINUE1_1_1", + "D_578895128_1_1", + "D_384881609_1_1", + "D_483975329_1_1", + "D_570279754_1_1", + "D_907590067_1_1", + "D_860112841_1_1", + "D_158354252_1_1", + "D_654594205_1_1", + "D_550722030_1_1", + "D_142912472_1_1", + "D_158409298_1_1", + "D_529744595_1_1", + "D_315987564_1_1", + "D_852278004_1_1", + "D_391972881_1_1", + "D_259089008_1_1", + "D_209771602_1_1", + "D_682651189_1_1", + "D_750994269_1_1", + "D_700889863_1_1", + "D_990114799_1_1", + "D_195363361_1_1", + "D_216840563_1_1", + "D_514034680_1_1", + "D_247160067_1_1", + "D_312545873_1_1", + "SIBSUM_1_1", + "D_890637099_2_2", + "D_869387390_2_2", + "D_537137982_2_2", + "D_607773106_2_2", + "_CONTINUE1_2_2", + "D_578895128_2_2", + "D_384881609_2_2", + "D_483975329_2_2", + "D_570279754_2_2", + "D_907590067_2_2", + "D_860112841_2_2", + "D_158354252_2_2", + "D_654594205_2_2", + "D_550722030_2_2", + "D_142912472_2_2", + "D_158409298_2_2", + "D_529744595_2_2", + "D_315987564_2_2", + "D_852278004_2_2", + "D_391972881_2_2", + "D_259089008_2_2", + "D_209771602_2_2", + "D_682651189_2_2", + "D_750994269_2_2", + "D_700889863_2_2", + "D_990114799_2_2", + "D_195363361_2_2", + "D_216840563_2_2", + "D_514034680_2_2", + "D_247160067_2_2", + "D_312545873_2_2", + "SIBSUM_2_2", + "D_890637099_3_3", + "D_869387390_3_3", + "D_537137982_3_3", + "D_607773106_3_3", + "_CONTINUE1_3_3", + "D_578895128_3_3", + "D_384881609_3_3", + "D_483975329_3_3", + "D_570279754_3_3", + "D_907590067_3_3", + "D_860112841_3_3", + "D_158354252_3_3", + "D_654594205_3_3", + "D_550722030_3_3", + "D_142912472_3_3", + "D_158409298_3_3", + "D_529744595_3_3", + "D_315987564_3_3", + "D_852278004_3_3", + "D_391972881_3_3", + "D_259089008_3_3", + "D_209771602_3_3", + "D_682651189_3_3", + "D_750994269_3_3", + "D_700889863_3_3", + "D_990114799_3_3", + "D_195363361_3_3", + "D_216840563_3_3", + "D_514034680_3_3", + "D_247160067_3_3", + "D_312545873_3_3", + "SIBSUM_3_3", + "D_890637099_4_4", + "D_869387390_4_4", + "D_537137982_4_4", + "D_607773106_4_4", + "_CONTINUE1_4_4", + "D_578895128_4_4", + "D_384881609_4_4", + "D_483975329_4_4", + "D_570279754_4_4", + "D_907590067_4_4", + "D_860112841_4_4", + "D_158354252_4_4", + "D_654594205_4_4", + "D_550722030_4_4", + "D_142912472_4_4", + "D_158409298_4_4", + "D_529744595_4_4", + "D_315987564_4_4", + "D_852278004_4_4", + "D_391972881_4_4", + "D_259089008_4_4", + "D_209771602_4_4", + "D_682651189_4_4", + "D_750994269_4_4", + "D_700889863_4_4", + "D_990114799_4_4", + "D_195363361_4_4", + "D_216840563_4_4", + "D_514034680_4_4", + "D_247160067_4_4", + "D_312545873_4_4", + "SIBSUM_4_4", + "D_890637099_5_5", + "D_869387390_5_5", + "D_537137982_5_5", + "D_607773106_5_5", + "_CONTINUE1_5_5", + "D_578895128_5_5", + "D_384881609_5_5", + "D_483975329_5_5", + "D_570279754_5_5", + "D_907590067_5_5", + "D_860112841_5_5", + "D_158354252_5_5", + "D_654594205_5_5", + "D_550722030_5_5", + "D_142912472_5_5", + "D_158409298_5_5", + "D_529744595_5_5", + "D_315987564_5_5", + "D_852278004_5_5", + "D_391972881_5_5", + "D_259089008_5_5", + "D_209771602_5_5", + "D_682651189_5_5", + "D_750994269_5_5", + "D_700889863_5_5", + "D_990114799_5_5", + "D_195363361_5_5", + "D_216840563_5_5", + "D_514034680_5_5", + "D_247160067_5_5", + "D_312545873_5_5", + "SIBSUM_5_5", + "D_890637099_6_6", + "D_869387390_6_6", + "D_537137982_6_6", + "D_607773106_6_6", + "_CONTINUE1_6_6", + "D_578895128_6_6", + "D_384881609_6_6", + "D_483975329_6_6", + "D_570279754_6_6", + "D_907590067_6_6", + "D_860112841_6_6", + "D_158354252_6_6", + "D_654594205_6_6", + "D_550722030_6_6", + "D_142912472_6_6", + "D_158409298_6_6", + "D_529744595_6_6", + "D_315987564_6_6", + "D_852278004_6_6", + "D_391972881_6_6", + "D_259089008_6_6", + "D_209771602_6_6", + "D_682651189_6_6", + "D_750994269_6_6", + "D_700889863_6_6", + "D_990114799_6_6", + "D_195363361_6_6", + "D_216840563_6_6", + "D_514034680_6_6", + "D_247160067_6_6", + "D_312545873_6_6", + "SIBSUM_6_6", + "D_890637099_7_7", + "D_869387390_7_7", + "D_537137982_7_7", + "D_607773106_7_7", + "_CONTINUE1_7_7", + "D_578895128_7_7", + "D_384881609_7_7", + "D_483975329_7_7", + "D_570279754_7_7", + "D_907590067_7_7", + "D_860112841_7_7", + "D_158354252_7_7", + "D_654594205_7_7", + "D_550722030_7_7", + "D_142912472_7_7", + "D_158409298_7_7", + "D_529744595_7_7", + "D_315987564_7_7", + "D_852278004_7_7", + "D_391972881_7_7", + "D_259089008_7_7", + "D_209771602_7_7", + "D_682651189_7_7", + "D_750994269_7_7", + "D_700889863_7_7", + "D_990114799_7_7", + "D_195363361_7_7", + "D_216840563_7_7", + "D_514034680_7_7", + "D_247160067_7_7", + "D_312545873_7_7", + "SIBSUM_7_7", + "D_890637099_8_8", + "D_869387390_8_8", + "D_537137982_8_8", + "D_607773106_8_8", + "_CONTINUE1_8_8", + "D_578895128_8_8", + "D_384881609_8_8", + "D_483975329_8_8", + "D_570279754_8_8", + "D_907590067_8_8", + "D_860112841_8_8", + "D_158354252_8_8", + "D_654594205_8_8", + "D_550722030_8_8", + "D_142912472_8_8", + "D_158409298_8_8", + "D_529744595_8_8", + "D_315987564_8_8", + "D_852278004_8_8", + "D_391972881_8_8", + "D_259089008_8_8", + "D_209771602_8_8", + "D_682651189_8_8", + "D_750994269_8_8", + "D_700889863_8_8", + "D_990114799_8_8", + "D_195363361_8_8", + "D_216840563_8_8", + "D_514034680_8_8", + "D_247160067_8_8", + "D_312545873_8_8", + "SIBSUM_8_8", + "D_890637099_9_9", + "D_869387390_9_9", + "D_537137982_9_9", + "D_607773106_9_9", + "_CONTINUE1_9_9", + "D_578895128_9_9", + "D_384881609_9_9", + "D_483975329_9_9", + "D_570279754_9_9", + "D_907590067_9_9", + "D_860112841_9_9", + "D_158354252_9_9", + "D_654594205_9_9", + "D_550722030_9_9", + "D_142912472_9_9", + "D_158409298_9_9", + "D_529744595_9_9", + "D_315987564_9_9", + "D_852278004_9_9", + "D_391972881_9_9", + "D_259089008_9_9", + "D_209771602_9_9", + "D_682651189_9_9", + "D_750994269_9_9", + "D_700889863_9_9", + "D_990114799_9_9", + "D_195363361_9_9", + "D_216840563_9_9", + "D_514034680_9_9", + "D_247160067_9_9", + "D_312545873_9_9", + "SIBSUM_9_9", + "D_890637099_10_10", + "D_869387390_10_10", + "D_537137982_10_10", + "D_607773106_10_10", + "_CONTINUE1_10_10", + "D_578895128_10_10", + "D_384881609_10_10", + "D_483975329_10_10", + "D_570279754_10_10", + "D_907590067_10_10", + "D_860112841_10_10", + "D_158354252_10_10", + "D_654594205_10_10", + "D_550722030_10_10", + "D_142912472_10_10", + "D_158409298_10_10", + "D_529744595_10_10", + "D_315987564_10_10", + "D_852278004_10_10", + "D_391972881_10_10", + "D_259089008_10_10", + "D_209771602_10_10", + "D_682651189_10_10", + "D_750994269_10_10", + "D_700889863_10_10", + "D_990114799_10_10", + "D_195363361_10_10", + "D_216840563_10_10", + "D_514034680_10_10", + "D_247160067_10_10", + "D_312545873_10_10", + "SIBSUM_10_10", + "D_890637099_11_11", + "D_869387390_11_11", + "D_537137982_11_11", + "D_607773106_11_11", + "_CONTINUE1_11_11", + "D_578895128_11_11", + "D_384881609_11_11", + "D_483975329_11_11", + "D_570279754_11_11", + "D_907590067_11_11", + "D_860112841_11_11", + "D_158354252_11_11", + "D_654594205_11_11", + "D_550722030_11_11", + "D_142912472_11_11", + "D_158409298_11_11", + "D_529744595_11_11", + "D_315987564_11_11", + "D_852278004_11_11", + "D_391972881_11_11", + "D_259089008_11_11", + "D_209771602_11_11", + "D_682651189_11_11", + "D_750994269_11_11", + "D_700889863_11_11", + "D_990114799_11_11", + "D_195363361_11_11", + "D_216840563_11_11", + "D_514034680_11_11", + "D_247160067_11_11", + "D_312545873_11_11", + "SIBSUM_11_11", + "D_890637099_12_12", + "D_869387390_12_12", + "D_537137982_12_12", + "D_607773106_12_12", + "_CONTINUE1_12_12", + "D_578895128_12_12", + "D_384881609_12_12", + "D_483975329_12_12", + "D_570279754_12_12", + "D_907590067_12_12", + "D_860112841_12_12", + "D_158354252_12_12", + "D_654594205_12_12", + "D_550722030_12_12", + "D_142912472_12_12", + "D_158409298_12_12", + "D_529744595_12_12", + "D_315987564_12_12", + "D_852278004_12_12", + "D_391972881_12_12", + "D_259089008_12_12", + "D_209771602_12_12", + "D_682651189_12_12", + "D_750994269_12_12", + "D_700889863_12_12", + "D_990114799_12_12", + "D_195363361_12_12", + "D_216840563_12_12", + "D_514034680_12_12", + "D_247160067_12_12", + "D_312545873_12_12", + "SIBSUM_12_12", + "D_890637099_13_13", + "D_869387390_13_13", + "D_537137982_13_13", + "D_607773106_13_13", + "_CONTINUE1_13_13", + "D_578895128_13_13", + "D_384881609_13_13", + "D_483975329_13_13", + "D_570279754_13_13", + "D_907590067_13_13", + "D_860112841_13_13", + "D_158354252_13_13", + "D_654594205_13_13", + "D_550722030_13_13", + "D_142912472_13_13", + "D_158409298_13_13", + "D_529744595_13_13", + "D_315987564_13_13", + "D_852278004_13_13", + "D_391972881_13_13", + "D_259089008_13_13", + "D_209771602_13_13", + "D_682651189_13_13", + "D_750994269_13_13", + "D_700889863_13_13", + "D_990114799_13_13", + "D_195363361_13_13", + "D_216840563_13_13", + "D_514034680_13_13", + "D_247160067_13_13", + "D_312545873_13_13", + "SIBSUM_13_13", + "D_890637099_14_14", + "D_869387390_14_14", + "D_537137982_14_14", + "D_607773106_14_14", + "_CONTINUE1_14_14", + "D_578895128_14_14", + "D_384881609_14_14", + "D_483975329_14_14", + "D_570279754_14_14", + "D_907590067_14_14", + "D_860112841_14_14", + "D_158354252_14_14", + "D_654594205_14_14", + "D_550722030_14_14", + "D_142912472_14_14", + "D_158409298_14_14", + "D_529744595_14_14", + "D_315987564_14_14", + "D_852278004_14_14", + "D_391972881_14_14", + "D_259089008_14_14", + "D_209771602_14_14", + "D_682651189_14_14", + "D_750994269_14_14", + "D_700889863_14_14", + "D_990114799_14_14", + "D_195363361_14_14", + "D_216840563_14_14", + "D_514034680_14_14", + "D_247160067_14_14", + "D_312545873_14_14", + "SIBSUM_14_14", + "D_890637099_15_15", + "D_869387390_15_15", + "D_537137982_15_15", + "D_607773106_15_15", + "_CONTINUE1_15_15", + "D_578895128_15_15", + "D_384881609_15_15", + "D_483975329_15_15", + "D_570279754_15_15", + "D_907590067_15_15", + "D_860112841_15_15", + "D_158354252_15_15", + "D_654594205_15_15", + "D_550722030_15_15", + "D_142912472_15_15", + "D_158409298_15_15", + "D_529744595_15_15", + "D_315987564_15_15", + "D_852278004_15_15", + "D_391972881_15_15", + "D_259089008_15_15", + "D_209771602_15_15", + "D_682651189_15_15", + "D_750994269_15_15", + "D_700889863_15_15", + "D_990114799_15_15", + "D_195363361_15_15", + "D_216840563_15_15", + "D_514034680_15_15", + "D_247160067_15_15", + "D_312545873_15_15", + "SIBSUM_15_15", + "D_890637099_16_16", + "D_869387390_16_16", + "D_537137982_16_16", + "D_607773106_16_16", + "_CONTINUE1_16_16", + "D_578895128_16_16", + "D_384881609_16_16", + "D_483975329_16_16", + "D_570279754_16_16", + "D_907590067_16_16", + "D_860112841_16_16", + "D_158354252_16_16", + "D_654594205_16_16", + "D_550722030_16_16", + "D_142912472_16_16", + "D_158409298_16_16", + "D_529744595_16_16", + "D_315987564_16_16", + "D_852278004_16_16", + "D_391972881_16_16", + "D_259089008_16_16", + "D_209771602_16_16", + "D_682651189_16_16", + "D_750994269_16_16", + "D_700889863_16_16", + "D_990114799_16_16", + "D_195363361_16_16", + "D_216840563_16_16", + "D_514034680_16_16", + "D_247160067_16_16", + "D_312545873_16_16", + "SIBSUM_16_16", + "D_890637099_17_17", + "D_869387390_17_17", + "D_537137982_17_17", + "D_607773106_17_17", + "_CONTINUE1_17_17", + "D_578895128_17_17", + "D_384881609_17_17", + "D_483975329_17_17", + "D_570279754_17_17", + "D_907590067_17_17", + "D_860112841_17_17", + "D_158354252_17_17", + "D_654594205_17_17", + "D_550722030_17_17", + "D_142912472_17_17", + "D_158409298_17_17", + "D_529744595_17_17", + "D_315987564_17_17", + "D_852278004_17_17", + "D_391972881_17_17", + "D_259089008_17_17", + "D_209771602_17_17", + "D_682651189_17_17", + "D_750994269_17_17", + "D_700889863_17_17", + "D_990114799_17_17", + "D_195363361_17_17", + "D_216840563_17_17", + "D_514034680_17_17", + "D_247160067_17_17", + "D_312545873_17_17", + "SIBSUM_17_17", + "D_890637099_18_18", + "D_869387390_18_18", + "D_537137982_18_18", + "D_607773106_18_18", + "_CONTINUE1_18_18", + "D_578895128_18_18", + "D_384881609_18_18", + "D_483975329_18_18", + "D_570279754_18_18", + "D_907590067_18_18", + "D_860112841_18_18", + "D_158354252_18_18", + "D_654594205_18_18", + "D_550722030_18_18", + "D_142912472_18_18", + "D_158409298_18_18", + "D_529744595_18_18", + "D_315987564_18_18", + "D_852278004_18_18", + "D_391972881_18_18", + "D_259089008_18_18", + "D_209771602_18_18", + "D_682651189_18_18", + "D_750994269_18_18", + "D_700889863_18_18", + "D_990114799_18_18", + "D_195363361_18_18", + "D_216840563_18_18", + "D_514034680_18_18", + "D_247160067_18_18", + "D_312545873_18_18", + "SIBSUM_18_18", + "D_890637099_19_19", + "D_869387390_19_19", + "D_537137982_19_19", + "D_607773106_19_19", + "_CONTINUE1_19_19", + "D_578895128_19_19", + "D_384881609_19_19", + "D_483975329_19_19", + "D_570279754_19_19", + "D_907590067_19_19", + "D_860112841_19_19", + "D_158354252_19_19", + "D_654594205_19_19", + "D_550722030_19_19", + "D_142912472_19_19", + "D_158409298_19_19", + "D_529744595_19_19", + "D_315987564_19_19", + "D_852278004_19_19", + "D_391972881_19_19", + "D_259089008_19_19", + "D_209771602_19_19", + "D_682651189_19_19", + "D_750994269_19_19", + "D_700889863_19_19", + "D_990114799_19_19", + "D_195363361_19_19", + "D_216840563_19_19", + "D_514034680_19_19", + "D_247160067_19_19", + "D_312545873_19_19", + "SIBSUM_19_19", + "D_890637099_20_20", + "D_869387390_20_20", + "D_537137982_20_20", + "D_607773106_20_20", + "_CONTINUE1_20_20", + "D_578895128_20_20", + "D_384881609_20_20", + "D_483975329_20_20", + "D_570279754_20_20", + "D_907590067_20_20", + "D_860112841_20_20", + "D_158354252_20_20", + "D_654594205_20_20", + "D_550722030_20_20", + "D_142912472_20_20", + "D_158409298_20_20", + "D_529744595_20_20", + "D_315987564_20_20", + "D_852278004_20_20", + "D_391972881_20_20", + "D_259089008_20_20", + "D_209771602_20_20", + "D_682651189_20_20", + "D_750994269_20_20", + "D_700889863_20_20", + "D_990114799_20_20", + "D_195363361_20_20", + "D_216840563_20_20", + "D_514034680_20_20", + "D_247160067_20_20", + "D_312545873_20_20", + "SIBSUM_20_20", + "D_890637099_21_21", + "D_869387390_21_21", + "D_537137982_21_21", + "D_607773106_21_21", + "_CONTINUE1_21_21", + "D_578895128_21_21", + "D_384881609_21_21", + "D_483975329_21_21", + "D_570279754_21_21", + "D_907590067_21_21", + "D_860112841_21_21", + "D_158354252_21_21", + "D_654594205_21_21", + "D_550722030_21_21", + "D_142912472_21_21", + "D_158409298_21_21", + "D_529744595_21_21", + "D_315987564_21_21", + "D_852278004_21_21", + "D_391972881_21_21", + "D_259089008_21_21", + "D_209771602_21_21", + "D_682651189_21_21", + "D_750994269_21_21", + "D_700889863_21_21", + "D_990114799_21_21", + "D_195363361_21_21", + "D_216840563_21_21", + "D_514034680_21_21", + "D_247160067_21_21", + "D_312545873_21_21", + "SIBSUM_21_21", + "D_890637099_22_22", + "D_869387390_22_22", + "D_537137982_22_22", + "D_607773106_22_22", + "_CONTINUE1_22_22", + "D_578895128_22_22", + "D_384881609_22_22", + "D_483975329_22_22", + "D_570279754_22_22", + "D_907590067_22_22", + "D_860112841_22_22", + "D_158354252_22_22", + "D_654594205_22_22", + "D_550722030_22_22", + "D_142912472_22_22", + "D_158409298_22_22", + "D_529744595_22_22", + "D_315987564_22_22", + "D_852278004_22_22", + "D_391972881_22_22", + "D_259089008_22_22", + "D_209771602_22_22", + "D_682651189_22_22", + "D_750994269_22_22", + "D_700889863_22_22", + "D_990114799_22_22", + "D_195363361_22_22", + "D_216840563_22_22", + "D_514034680_22_22", + "D_247160067_22_22", + "D_312545873_22_22", + "SIBSUM_22_22", + "D_890637099_23_23", + "D_869387390_23_23", + "D_537137982_23_23", + "D_607773106_23_23", + "_CONTINUE1_23_23", + "D_578895128_23_23", + "D_384881609_23_23", + "D_483975329_23_23", + "D_570279754_23_23", + "D_907590067_23_23", + "D_860112841_23_23", + "D_158354252_23_23", + "D_654594205_23_23", + "D_550722030_23_23", + "D_142912472_23_23", + "D_158409298_23_23", + "D_529744595_23_23", + "D_315987564_23_23", + "D_852278004_23_23", + "D_391972881_23_23", + "D_259089008_23_23", + "D_209771602_23_23", + "D_682651189_23_23", + "D_750994269_23_23", + "D_700889863_23_23", + "D_990114799_23_23", + "D_195363361_23_23", + "D_216840563_23_23", + "D_514034680_23_23", + "D_247160067_23_23", + "D_312545873_23_23", + "SIBSUM_23_23", + "D_890637099_24_24", + "D_869387390_24_24", + "D_537137982_24_24", + "D_607773106_24_24", + "_CONTINUE1_24_24", + "D_578895128_24_24", + "D_384881609_24_24", + "D_483975329_24_24", + "D_570279754_24_24", + "D_907590067_24_24", + "D_860112841_24_24", + "D_158354252_24_24", + "D_654594205_24_24", + "D_550722030_24_24", + "D_142912472_24_24", + "D_158409298_24_24", + "D_529744595_24_24", + "D_315987564_24_24", + "D_852278004_24_24", + "D_391972881_24_24", + "D_259089008_24_24", + "D_209771602_24_24", + "D_682651189_24_24", + "D_750994269_24_24", + "D_700889863_24_24", + "D_990114799_24_24", + "D_195363361_24_24", + "D_216840563_24_24", + "D_514034680_24_24", + "D_247160067_24_24", + "D_312545873_24_24", + "SIBSUM_24_24", + "D_890637099_25_25", + "D_869387390_25_25", + "D_537137982_25_25", + "D_607773106_25_25", + "_CONTINUE1_25_25", + "D_578895128_25_25", + "D_384881609_25_25", + "D_483975329_25_25", + "D_570279754_25_25", + "D_907590067_25_25", + "D_860112841_25_25", + "D_158354252_25_25", + "D_654594205_25_25", + "D_550722030_25_25", + "D_142912472_25_25", + "D_158409298_25_25", + "D_529744595_25_25", + "D_315987564_25_25", + "D_852278004_25_25", + "D_391972881_25_25", + "D_259089008_25_25", + "D_209771602_25_25", + "D_682651189_25_25", + "D_750994269_25_25", + "D_700889863_25_25", + "D_990114799_25_25", + "D_195363361_25_25", + "D_216840563_25_25", + "D_514034680_25_25", + "D_247160067_25_25", + "D_312545873_25_25", + "SIBSUM_25_25", + "D_640010727_1_1", + "D_236590500_1_1", + "D_718867914_1_1", + "_CONTINUE2_1_1", + "D_812370563_1_1", + "D_900939817_1_1", + "D_938150507_1_1", + "D_601211723_1_1", + "D_861788020_1_1", + "D_204425387_1_1", + "D_558929585_1_1", + "D_233764880_1_1", + "D_905145893_1_1", + "D_473190270_1_1", + "D_483735587_1_1", + "D_331759900_1_1", + "D_513077276_1_1", + "D_519974530_1_1", + "D_907776050_1_1", + "D_271684775_1_1", + "D_252160589_1_1", + "D_774774759_1_1", + "D_127257956_1_1", + "D_496917282_1_1", + "D_908129316_1_1", + "D_795003496_1_1", + "D_969177591_1_1", + "D_116065851_1_1", + "D_278159347_1_1", + "D_845219872_1_1", + "CHILDSUM_1_1", + "D_640010727_2_2", + "D_236590500_2_2", + "D_718867914_2_2", + "_CONTINUE2_2_2", + "D_812370563_2_2", + "D_900939817_2_2", + "D_938150507_2_2", + "D_601211723_2_2", + "D_861788020_2_2", + "D_204425387_2_2", + "D_558929585_2_2", + "D_233764880_2_2", + "D_905145893_2_2", + "D_473190270_2_2", + "D_483735587_2_2", + "D_331759900_2_2", + "D_513077276_2_2", + "D_519974530_2_2", + "D_907776050_2_2", + "D_271684775_2_2", + "D_252160589_2_2", + "D_774774759_2_2", + "D_127257956_2_2", + "D_496917282_2_2", + "D_908129316_2_2", + "D_795003496_2_2", + "D_969177591_2_2", + "D_116065851_2_2", + "D_278159347_2_2", + "D_845219872_2_2", + "CHILDSUM_2_2", + "D_640010727_3_3", + "D_236590500_3_3", + "D_718867914_3_3", + "_CONTINUE2_3_3", + "D_812370563_3_3", + "D_900939817_3_3", + "D_938150507_3_3", + "D_601211723_3_3", + "D_861788020_3_3", + "D_204425387_3_3", + "D_558929585_3_3", + "D_233764880_3_3", + "D_905145893_3_3", + "D_473190270_3_3", + "D_483735587_3_3", + "D_331759900_3_3", + "D_513077276_3_3", + "D_519974530_3_3", + "D_907776050_3_3", + "D_271684775_3_3", + "D_252160589_3_3", + "D_774774759_3_3", + "D_127257956_3_3", + "D_496917282_3_3", + "D_908129316_3_3", + "D_795003496_3_3", + "D_969177591_3_3", + "D_116065851_3_3", + "D_278159347_3_3", + "D_845219872_3_3", + "CHILDSUM_3_3", + "D_640010727_4_4", + "D_236590500_4_4", + "D_718867914_4_4", + "_CONTINUE2_4_4", + "D_812370563_4_4", + "D_900939817_4_4", + "D_938150507_4_4", + "D_601211723_4_4", + "D_861788020_4_4", + "D_204425387_4_4", + "D_558929585_4_4", + "D_233764880_4_4", + "D_905145893_4_4", + "D_473190270_4_4", + "D_483735587_4_4", + "D_331759900_4_4", + "D_513077276_4_4", + "D_519974530_4_4", + "D_907776050_4_4", + "D_271684775_4_4", + "D_252160589_4_4", + "D_774774759_4_4", + "D_127257956_4_4", + "D_496917282_4_4", + "D_908129316_4_4", + "D_795003496_4_4", + "D_969177591_4_4", + "D_116065851_4_4", + "D_278159347_4_4", + "D_845219872_4_4", + "CHILDSUM_4_4", + "D_640010727_5_5", + "D_236590500_5_5", + "D_718867914_5_5", + "_CONTINUE2_5_5", + "D_812370563_5_5", + "D_900939817_5_5", + "D_938150507_5_5", + "D_601211723_5_5", + "D_861788020_5_5", + "D_204425387_5_5", + "D_558929585_5_5", + "D_233764880_5_5", + "D_905145893_5_5", + "D_473190270_5_5", + "D_483735587_5_5", + "D_331759900_5_5", + "D_513077276_5_5", + "D_519974530_5_5", + "D_907776050_5_5", + "D_271684775_5_5", + "D_252160589_5_5", + "D_774774759_5_5", + "D_127257956_5_5", + "D_496917282_5_5", + "D_908129316_5_5", + "D_795003496_5_5", + "D_969177591_5_5", + "D_116065851_5_5", + "D_278159347_5_5", + "D_845219872_5_5", + "CHILDSUM_5_5", + "D_640010727_6_6", + "D_236590500_6_6", + "D_718867914_6_6", + "_CONTINUE2_6_6", + "D_812370563_6_6", + "D_900939817_6_6", + "D_938150507_6_6", + "D_601211723_6_6", + "D_861788020_6_6", + "D_204425387_6_6", + "D_558929585_6_6", + "D_233764880_6_6", + "D_905145893_6_6", + "D_473190270_6_6", + "D_483735587_6_6", + "D_331759900_6_6", + "D_513077276_6_6", + "D_519974530_6_6", + "D_907776050_6_6", + "D_271684775_6_6", + "D_252160589_6_6", + "D_774774759_6_6", + "D_127257956_6_6", + "D_496917282_6_6", + "D_908129316_6_6", + "D_795003496_6_6", + "D_969177591_6_6", + "D_116065851_6_6", + "D_278159347_6_6", + "D_845219872_6_6", + "CHILDSUM_6_6", + "D_640010727_7_7", + "D_236590500_7_7", + "D_718867914_7_7", + "_CONTINUE2_7_7", + "D_812370563_7_7", + "D_900939817_7_7", + "D_938150507_7_7", + "D_601211723_7_7", + "D_861788020_7_7", + "D_204425387_7_7", + "D_558929585_7_7", + "D_233764880_7_7", + "D_905145893_7_7", + "D_473190270_7_7", + "D_483735587_7_7", + "D_331759900_7_7", + "D_513077276_7_7", + "D_519974530_7_7", + "D_907776050_7_7", + "D_271684775_7_7", + "D_252160589_7_7", + "D_774774759_7_7", + "D_127257956_7_7", + "D_496917282_7_7", + "D_908129316_7_7", + "D_795003496_7_7", + "D_969177591_7_7", + "D_116065851_7_7", + "D_278159347_7_7", + "D_845219872_7_7", + "CHILDSUM_7_7", + "D_640010727_8_8", + "D_236590500_8_8", + "D_718867914_8_8", + "_CONTINUE2_8_8", + "D_812370563_8_8", + "D_900939817_8_8", + "D_938150507_8_8", + "D_601211723_8_8", + "D_861788020_8_8", + "D_204425387_8_8", + "D_558929585_8_8", + "D_233764880_8_8", + "D_905145893_8_8", + "D_473190270_8_8", + "D_483735587_8_8", + "D_331759900_8_8", + "D_513077276_8_8", + "D_519974530_8_8", + "D_907776050_8_8", + "D_271684775_8_8", + "D_252160589_8_8", + "D_774774759_8_8", + "D_127257956_8_8", + "D_496917282_8_8", + "D_908129316_8_8", + "D_795003496_8_8", + "D_969177591_8_8", + "D_116065851_8_8", + "D_278159347_8_8", + "D_845219872_8_8", + "CHILDSUM_8_8", + "D_640010727_9_9", + "D_236590500_9_9", + "D_718867914_9_9", + "_CONTINUE2_9_9", + "D_812370563_9_9", + "D_900939817_9_9", + "D_938150507_9_9", + "D_601211723_9_9", + "D_861788020_9_9", + "D_204425387_9_9", + "D_558929585_9_9", + "D_233764880_9_9", + "D_905145893_9_9", + "D_473190270_9_9", + "D_483735587_9_9", + "D_331759900_9_9", + "D_513077276_9_9", + "D_519974530_9_9", + "D_907776050_9_9", + "D_271684775_9_9", + "D_252160589_9_9", + "D_774774759_9_9", + "D_127257956_9_9", + "D_496917282_9_9", + "D_908129316_9_9", + "D_795003496_9_9", + "D_969177591_9_9", + "D_116065851_9_9", + "D_278159347_9_9", + "D_845219872_9_9", + "CHILDSUM_9_9", + "D_640010727_10_10", + "D_236590500_10_10", + "D_718867914_10_10", + "_CONTINUE2_10_10", + "D_812370563_10_10", + "D_900939817_10_10", + "D_938150507_10_10", + "D_601211723_10_10", + "D_861788020_10_10", + "D_204425387_10_10", + "D_558929585_10_10", + "D_233764880_10_10", + "D_905145893_10_10", + "D_473190270_10_10", + "D_483735587_10_10", + "D_331759900_10_10", + "D_513077276_10_10", + "D_519974530_10_10", + "D_907776050_10_10", + "D_271684775_10_10", + "D_252160589_10_10", + "D_774774759_10_10", + "D_127257956_10_10", + "D_496917282_10_10", + "D_908129316_10_10", + "D_795003496_10_10", + "D_969177591_10_10", + "D_116065851_10_10", + "D_278159347_10_10", + "D_845219872_10_10", + "CHILDSUM_10_10", + "D_640010727_11_11", + "D_236590500_11_11", + "D_718867914_11_11", + "_CONTINUE2_11_11", + "D_812370563_11_11", + "D_900939817_11_11", + "D_938150507_11_11", + "D_601211723_11_11", + "D_861788020_11_11", + "D_204425387_11_11", + "D_558929585_11_11", + "D_233764880_11_11", + "D_905145893_11_11", + "D_473190270_11_11", + "D_483735587_11_11", + "D_331759900_11_11", + "D_513077276_11_11", + "D_519974530_11_11", + "D_907776050_11_11", + "D_271684775_11_11", + "D_252160589_11_11", + "D_774774759_11_11", + "D_127257956_11_11", + "D_496917282_11_11", + "D_908129316_11_11", + "D_795003496_11_11", + "D_969177591_11_11", + "D_116065851_11_11", + "D_278159347_11_11", + "D_845219872_11_11", + "CHILDSUM_11_11", + "D_640010727_12_12", + "D_236590500_12_12", + "D_718867914_12_12", + "_CONTINUE2_12_12", + "D_812370563_12_12", + "D_900939817_12_12", + "D_938150507_12_12", + "D_601211723_12_12", + "D_861788020_12_12", + "D_204425387_12_12", + "D_558929585_12_12", + "D_233764880_12_12", + "D_905145893_12_12", + "D_473190270_12_12", + "D_483735587_12_12", + "D_331759900_12_12", + "D_513077276_12_12", + "D_519974530_12_12", + "D_907776050_12_12", + "D_271684775_12_12", + "D_252160589_12_12", + "D_774774759_12_12", + "D_127257956_12_12", + "D_496917282_12_12", + "D_908129316_12_12", + "D_795003496_12_12", + "D_969177591_12_12", + "D_116065851_12_12", + "D_278159347_12_12", + "D_845219872_12_12", + "CHILDSUM_12_12", + "D_640010727_13_13", + "D_236590500_13_13", + "D_718867914_13_13", + "_CONTINUE2_13_13", + "D_812370563_13_13", + "D_900939817_13_13", + "D_938150507_13_13", + "D_601211723_13_13", + "D_861788020_13_13", + "D_204425387_13_13", + "D_558929585_13_13", + "D_233764880_13_13", + "D_905145893_13_13", + "D_473190270_13_13", + "D_483735587_13_13", + "D_331759900_13_13", + "D_513077276_13_13", + "D_519974530_13_13", + "D_907776050_13_13", + "D_271684775_13_13", + "D_252160589_13_13", + "D_774774759_13_13", + "D_127257956_13_13", + "D_496917282_13_13", + "D_908129316_13_13", + "D_795003496_13_13", + "D_969177591_13_13", + "D_116065851_13_13", + "D_278159347_13_13", + "D_845219872_13_13", + "CHILDSUM_13_13", + "D_640010727_14_14", + "D_236590500_14_14", + "D_718867914_14_14", + "_CONTINUE2_14_14", + "D_812370563_14_14", + "D_900939817_14_14", + "D_938150507_14_14", + "D_601211723_14_14", + "D_861788020_14_14", + "D_204425387_14_14", + "D_558929585_14_14", + "D_233764880_14_14", + "D_905145893_14_14", + "D_473190270_14_14", + "D_483735587_14_14", + "D_331759900_14_14", + "D_513077276_14_14", + "D_519974530_14_14", + "D_907776050_14_14", + "D_271684775_14_14", + "D_252160589_14_14", + "D_774774759_14_14", + "D_127257956_14_14", + "D_496917282_14_14", + "D_908129316_14_14", + "D_795003496_14_14", + "D_969177591_14_14", + "D_116065851_14_14", + "D_278159347_14_14", + "D_845219872_14_14", + "CHILDSUM_14_14", + "D_640010727_15_15", + "D_236590500_15_15", + "D_718867914_15_15", + "_CONTINUE2_15_15", + "D_812370563_15_15", + "D_900939817_15_15", + "D_938150507_15_15", + "D_601211723_15_15", + "D_861788020_15_15", + "D_204425387_15_15", + "D_558929585_15_15", + "D_233764880_15_15", + "D_905145893_15_15", + "D_473190270_15_15", + "D_483735587_15_15", + "D_331759900_15_15", + "D_513077276_15_15", + "D_519974530_15_15", + "D_907776050_15_15", + "D_271684775_15_15", + "D_252160589_15_15", + "D_774774759_15_15", + "D_127257956_15_15", + "D_496917282_15_15", + "D_908129316_15_15", + "D_795003496_15_15", + "D_969177591_15_15", + "D_116065851_15_15", + "D_278159347_15_15", + "D_845219872_15_15", + "CHILDSUM_15_15", + "D_640010727_16_16", + "D_236590500_16_16", + "D_718867914_16_16", + "_CONTINUE2_16_16", + "D_812370563_16_16", + "D_900939817_16_16", + "D_938150507_16_16", + "D_601211723_16_16", + "D_861788020_16_16", + "D_204425387_16_16", + "D_558929585_16_16", + "D_233764880_16_16", + "D_905145893_16_16", + "D_473190270_16_16", + "D_483735587_16_16", + "D_331759900_16_16", + "D_513077276_16_16", + "D_519974530_16_16", + "D_907776050_16_16", + "D_271684775_16_16", + "D_252160589_16_16", + "D_774774759_16_16", + "D_127257956_16_16", + "D_496917282_16_16", + "D_908129316_16_16", + "D_795003496_16_16", + "D_969177591_16_16", + "D_116065851_16_16", + "D_278159347_16_16", + "D_845219872_16_16", + "CHILDSUM_16_16", + "D_640010727_17_17", + "D_236590500_17_17", + "D_718867914_17_17", + "_CONTINUE2_17_17", + "D_812370563_17_17", + "D_900939817_17_17", + "D_938150507_17_17", + "D_601211723_17_17", + "D_861788020_17_17", + "D_204425387_17_17", + "D_558929585_17_17", + "D_233764880_17_17", + "D_905145893_17_17", + "D_473190270_17_17", + "D_483735587_17_17", + "D_331759900_17_17", + "D_513077276_17_17", + "D_519974530_17_17", + "D_907776050_17_17", + "D_271684775_17_17", + "D_252160589_17_17", + "D_774774759_17_17", + "D_127257956_17_17", + "D_496917282_17_17", + "D_908129316_17_17", + "D_795003496_17_17", + "D_969177591_17_17", + "D_116065851_17_17", + "D_278159347_17_17", + "D_845219872_17_17", + "CHILDSUM_17_17", + "D_640010727_18_18", + "D_236590500_18_18", + "D_718867914_18_18", + "_CONTINUE2_18_18", + "D_812370563_18_18", + "D_900939817_18_18", + "D_938150507_18_18", + "D_601211723_18_18", + "D_861788020_18_18", + "D_204425387_18_18", + "D_558929585_18_18", + "D_233764880_18_18", + "D_905145893_18_18", + "D_473190270_18_18", + "D_483735587_18_18", + "D_331759900_18_18", + "D_513077276_18_18", + "D_519974530_18_18", + "D_907776050_18_18", + "D_271684775_18_18", + "D_252160589_18_18", + "D_774774759_18_18", + "D_127257956_18_18", + "D_496917282_18_18", + "D_908129316_18_18", + "D_795003496_18_18", + "D_969177591_18_18", + "D_116065851_18_18", + "D_278159347_18_18", + "D_845219872_18_18", + "CHILDSUM_18_18", + "D_640010727_19_19", + "D_236590500_19_19", + "D_718867914_19_19", + "_CONTINUE2_19_19", + "D_812370563_19_19", + "D_900939817_19_19", + "D_938150507_19_19", + "D_601211723_19_19", + "D_861788020_19_19", + "D_204425387_19_19", + "D_558929585_19_19", + "D_233764880_19_19", + "D_905145893_19_19", + "D_473190270_19_19", + "D_483735587_19_19", + "D_331759900_19_19", + "D_513077276_19_19", + "D_519974530_19_19", + "D_907776050_19_19", + "D_271684775_19_19", + "D_252160589_19_19", + "D_774774759_19_19", + "D_127257956_19_19", + "D_496917282_19_19", + "D_908129316_19_19", + "D_795003496_19_19", + "D_969177591_19_19", + "D_116065851_19_19", + "D_278159347_19_19", + "D_845219872_19_19", + "CHILDSUM_19_19", + "D_640010727_20_20", + "D_236590500_20_20", + "D_718867914_20_20", + "_CONTINUE2_20_20", + "D_812370563_20_20", + "D_900939817_20_20", + "D_938150507_20_20", + "D_601211723_20_20", + "D_861788020_20_20", + "D_204425387_20_20", + "D_558929585_20_20", + "D_233764880_20_20", + "D_905145893_20_20", + "D_473190270_20_20", + "D_483735587_20_20", + "D_331759900_20_20", + "D_513077276_20_20", + "D_519974530_20_20", + "D_907776050_20_20", + "D_271684775_20_20", + "D_252160589_20_20", + "D_774774759_20_20", + "D_127257956_20_20", + "D_496917282_20_20", + "D_908129316_20_20", + "D_795003496_20_20", + "D_969177591_20_20", + "D_116065851_20_20", + "D_278159347_20_20", + "D_845219872_20_20", + "CHILDSUM_20_20", + "D_640010727_21_21", + "D_236590500_21_21", + "D_718867914_21_21", + "_CONTINUE2_21_21", + "D_812370563_21_21", + "D_900939817_21_21", + "D_938150507_21_21", + "D_601211723_21_21", + "D_861788020_21_21", + "D_204425387_21_21", + "D_558929585_21_21", + "D_233764880_21_21", + "D_905145893_21_21", + "D_473190270_21_21", + "D_483735587_21_21", + "D_331759900_21_21", + "D_513077276_21_21", + "D_519974530_21_21", + "D_907776050_21_21", + "D_271684775_21_21", + "D_252160589_21_21", + "D_774774759_21_21", + "D_127257956_21_21", + "D_496917282_21_21", + "D_908129316_21_21", + "D_795003496_21_21", + "D_969177591_21_21", + "D_116065851_21_21", + "D_278159347_21_21", + "D_845219872_21_21", + "CHILDSUM_21_21", + "D_640010727_22_22", + "D_236590500_22_22", + "D_718867914_22_22", + "_CONTINUE2_22_22", + "D_812370563_22_22", + "D_900939817_22_22", + "D_938150507_22_22", + "D_601211723_22_22", + "D_861788020_22_22", + "D_204425387_22_22", + "D_558929585_22_22", + "D_233764880_22_22", + "D_905145893_22_22", + "D_473190270_22_22", + "D_483735587_22_22", + "D_331759900_22_22", + "D_513077276_22_22", + "D_519974530_22_22", + "D_907776050_22_22", + "D_271684775_22_22", + "D_252160589_22_22", + "D_774774759_22_22", + "D_127257956_22_22", + "D_496917282_22_22", + "D_908129316_22_22", + "D_795003496_22_22", + "D_969177591_22_22", + "D_116065851_22_22", + "D_278159347_22_22", + "D_845219872_22_22", + "CHILDSUM_22_22", + "D_640010727_23_23", + "D_236590500_23_23", + "D_718867914_23_23", + "_CONTINUE2_23_23", + "D_812370563_23_23", + "D_900939817_23_23", + "D_938150507_23_23", + "D_601211723_23_23", + "D_861788020_23_23", + "D_204425387_23_23", + "D_558929585_23_23", + "D_233764880_23_23", + "D_905145893_23_23", + "D_473190270_23_23", + "D_483735587_23_23", + "D_331759900_23_23", + "D_513077276_23_23", + "D_519974530_23_23", + "D_907776050_23_23", + "D_271684775_23_23", + "D_252160589_23_23", + "D_774774759_23_23", + "D_127257956_23_23", + "D_496917282_23_23", + "D_908129316_23_23", + "D_795003496_23_23", + "D_969177591_23_23", + "D_116065851_23_23", + "D_278159347_23_23", + "D_845219872_23_23", + "CHILDSUM_23_23", + "D_640010727_24_24", + "D_236590500_24_24", + "D_718867914_24_24", + "_CONTINUE2_24_24", + "D_812370563_24_24", + "D_900939817_24_24", + "D_938150507_24_24", + "D_601211723_24_24", + "D_861788020_24_24", + "D_204425387_24_24", + "D_558929585_24_24", + "D_233764880_24_24", + "D_905145893_24_24", + "D_473190270_24_24", + "D_483735587_24_24", + "D_331759900_24_24", + "D_513077276_24_24", + "D_519974530_24_24", + "D_907776050_24_24", + "D_271684775_24_24", + "D_252160589_24_24", + "D_774774759_24_24", + "D_127257956_24_24", + "D_496917282_24_24", + "D_908129316_24_24", + "D_795003496_24_24", + "D_969177591_24_24", + "D_116065851_24_24", + "D_278159347_24_24", + "D_845219872_24_24", + "CHILDSUM_24_24", + "D_640010727_25_25", + "D_236590500_25_25", + "D_718867914_25_25", + "_CONTINUE2_25_25", + "D_812370563_25_25", + "D_900939817_25_25", + "D_938150507_25_25", + "D_601211723_25_25", + "D_861788020_25_25", + "D_204425387_25_25", + "D_558929585_25_25", + "D_233764880_25_25", + "D_905145893_25_25", + "D_473190270_25_25", + "D_483735587_25_25", + "D_331759900_25_25", + "D_513077276_25_25", + "D_519974530_25_25", + "D_907776050_25_25", + "D_271684775_25_25", + "D_252160589_25_25", + "D_774774759_25_25", + "D_127257956_25_25", + "D_496917282_25_25", + "D_908129316_25_25", + "D_795003496_25_25", + "D_969177591_25_25", + "D_116065851_25_25", + "D_278159347_25_25", + "D_845219872_25_25", + "CHILDSUM_25_25", + "D_627122657", + "D_114529380", + "D_403258164", + "D_118061122", + "D_759004335" + ], + "byKind": { + "default": 128, + "no-response": 67, + "response": 1690 + }, + "byResolution": { + "exact": 1735, + "virtual-loop": 150 + }, + "triggerTypes": { + "checkbox": 1377, + "hidden": 195, + "radio": 313 + }, + "triggerValues": [ + "583826374", + "636411467", + "458435048", + "706998638", + "973565052", + "586825330", + "412790539", + "104430631", + "353358909", + "698944820", + "838744325", + "769790179", + "699553344", + "700811160", + "336505365", + "132548932", + "747787163", + "693851465", + "512012656", + "619337095", + "359025642", + "407340134", + "427219143", + "406890409", + "704544306", + "691766591", + "308645635", + "731115613", + "567284980", + "986548173", + "285995100", + "545628561", + "709786039", + "984479578", + "726539692", + "158044532", + "943054522", + "827542780", + "167238688", + "636030086", + "239687183", + "134592375", + "164910211", + "796616844", + "436689514", + "296357383", + "901077233", + "136956596", + "455776698", + "155874194", + "880962432", + "691450854", + "509721537", + "863286658", + "386524148", + "937208760", + "746542057", + "797189152", + "633546100", + "866002271", + "209101810", + "413734739", + "215525943", + "118789503", + "715563991", + "533491176", + "220755749", + "465318416", + "630100221", + "692881833", + "654450030", + "532603425", + "733236542", + "961987554", + "113771607", + "668256654", + "752953170", + "325506683", + "335563082", + "955881350", + "492902023", + "256196714", + "802859122", + "520432394", + "667901971", + "807835037", + "535003378", + "178420302", + "939782495", + "135725957", + "518416174", + "847945207", + "283025574", + "942970912", + "596122041", + "489400183", + "863246236", + "607793249", + "532172400", + "754745617", + "665036297", + "200837530", + "990319383", + "487917585", + "603181162", + "482225200", + "764891959", + "139822395", + "723614811", + "295976386", + "248374037" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_384191091,583826374)", + "equals(D_384191091,636411467)", + "equals(D_384191091,458435048)", + "equals(D_384191091,706998638)", + "equals(D_384191091,973565052)", + "equals(D_384191091,586825330)", + "equals(D_384191091,412790539)", + "equals(D_407056417,536341288)", + "equals(D_167101091,698944820)", + "equals(D_167101091,838744325)", + "equals(D_167101091,769790179)", + "equals(D_167101091,699553344)", + "equals(D_167101091,700811160)", + "equals(D_167101091,336505365)", + "equals(D_167101091,132548932)", + "equals(D_167101091,747787163)", + "equals(D_167101091,693851465)", + "equals(D_167101091,512012656)", + "equals(D_167101091,619337095)", + "equals(D_894259747,359025642)", + "equals(D_894259747,407340134)", + "equals(D_894259747,427219143)", + "equals(D_180961306,406890409)", + "equals(D_180961306,704544306)", + "equals(D_180961306,691766591)", + "equals(D_180961306,308645635)", + "equals(D_180961306,731115613)", + "equals(D_180961306,567284980)", + "equals(D_180961306,986548173)", + "equals(D_180961306,285995100)", + "equals(D_180961306,545628561)", + "equals(D_180961306,709786039)", + "equals(D_180961306,984479578)", + "equals(D_900541533,726539692)", + "equals(D_900541533,158044532)", + "equals(D_900541533,943054522)", + "equals(D_874046190,827542780)", + "equals(D_874046190,167238688)", + "equals(D_543728565,636030086)", + "equals(D_543728565,239687183)", + "equals(D_543728565,134592375)", + "equals(D_874709643,164910211)", + "equals(D_874709643,796616844)", + "equals(D_874709643,436689514)", + "equals(D_874709643,296357383)", + "equals(D_874709643,901077233)", + "equals(D_874709643,136956596)", + "equals(D_874709643,455776698)", + "equals(D_874709643,155874194)", + "equals(D_874709643,880962432)", + "equals(D_874709643,691450854)", + "equals(D_750420077,578416151)", + "equals(D_750420077,434651539)", + "equals(D_750420077,700100953)", + "equals(D_725626004,509721537)", + "equals(D_725626004,863286658)", + "equals(D_725626004,386524148)", + "equals(D_725626004,937208760)", + "equals(D_725626004,746542057)", + "equals(D_725626004,854945381)", + "equals(D_750420077,108025529)", + "and(equals(D_750420077,582784267),equals(D_750420077,751402477))", + "equals(D_750420077,751402477)", + "equals(D_750420077,582784267)", + "equals(D_624179836,797189152)", + "equals(D_624179836,633546100)", + "equals(D_624179836,866002271)", + "equals(D_624179836,209101810)", + "equals(D_624179836,413734739)", + "equals(D_624179836,215525943)", + "equals(D_624179836,118789503)", + "equals(D_624179836,715563991)", + "equals(D_624179836,533491176)", + "equals(D_517307064,752953170)", + "equals(D_517307064,325506683)", + "equals(D_517307064,335563082)", + "equals(D_517307064,955881350)", + "equals(D_517307064,492902023)", + "equals(D_517307064,256196714)", + "equals(D_517307064,802859122)", + "equals(D_517307064,520432394)", + "equals(D_517307064,667901971)", + "equals(D_517307064,807835037)", + "exists('D_942347130')", + "doesNotExist('D_942347130')", + "equals(D_624179836,220755749)", + "equals(D_624179836,465318416)", + "equals(D_624179836,630100221)", + "and(equals(D_624179836,630100221),or(equals(D_378892977,109972911),equals(D_378892977,333647143)))", + "equals(D_624179836,692881833)", + "and(equals(D_624179836,692881833),or(equals(D_224791140,537173119),equals(D_224791140,448068764)))", + "equals(D_624179836,654450030)", + "equals(D_624179836,532603425)", + "and(equals(D_624179836,532603425),or(equals(D_946504570,970716952),equals(D_946504570,770550588)))", + "equals(D_624179836,733236542)", + "and(equals(D_624179836,733236542),or(equals(D_107060069,500023550),equals(D_107060069,524029283)))", + "equals(D_624179836,961987554)", + "greaterThanOrEqual(D_795940097,1)", + "greaterThan(D_795940097,1)", + "_value('age') >= 18", + "(_value('age') >= 18)", + "_value('age') >=18", + "_value('age') >= 25", + "(_value('age') >= 25)", + "_value('age') >=25", + "_value('age') >= 35", + "(_value('age') >= 35)", + "_value('age') >=35", + "_value('age') >= 45", + "(_value('age') >= 45)", + "_value('age') >=45", + "_value('age') >= 55", + "(_value('age') >= 55)", + "_value('age') >=55", + "greaterThanOrEqual(percentDiff(D_821387277,D_121646540),.05)", + "greaterThanOrEqual(percentDiff(D_121646540,D_950080618),.05)", + "greaterThanOrEqual(percentDiff(D_950080618,D_407167089),.05)", + "greaterThanOrEqual(percentDiff(D_407167089,D_503154158),.05)", + "_value(\"age\") >= 40", + "valueIsOneOf(\"D_407056417\",536341288) and _value(\"age\") >= 40", + "valueIsOneOf(\"D_407056417\",654207589) and _value(\"age\") >= 40", + "equals(D_170440011,353358909)", + "doesNotEqual(D_170440011,353358909)", + "equals(D_814510313,939782495)", + "equals(D_814510313,135725957)", + "equals(D_814510313,518416174)", + "equals(D_814510313,847945207)", + "equals(D_814510313,283025574)", + "equals(D_814510313,942970912)", + "equals(D_814510313,596122041)", + "equals(D_814510313,489400183)", + "equals(D_814510313,863246236)", + "equals(D_814510313,607793249)", + "equals(D_814510313,532172400)", + "equals(D_814510313,754745617)", + "equals(D_814510313,665036297)", + "equals(D_814510313,200837530)", + "equals(D_814510313,990319383)", + "equals(D_814510313,487917585)", + "equals(D_814510313,603181162)", + "equals(D_814510313,482225200)", + "equals(D_814510313,764891959)", + "equals(D_814510313,139822395)", + "equals(D_814510313,723614811)", + "valueIsOneOf(\"D_814510313\",807835037) or valueLength(\"D_677702321\")>0", + "valueLength('D_677702321')>0", + "doesNotExist('D_677702321')", + "equals(D_814510313,178420302)", + "equals(D_367374606,353358909)", + "doesNotEqual(D_367374606,353358909)", + "equals(D_173240848,939782495)", + "equals(D_173240848,135725957)", + "equals(D_173240848,518416174)", + "equals(D_173240848,847945207)", + "equals(D_173240848,942970912)", + "equals(D_173240848,596122041)", + "equals(D_173240848,489400183)", + "equals(D_173240848,863246236)", + "equals(D_173240848,607793249)", + "equals(D_173240848,532172400)", + "equals(D_173240848,754745617)", + "equals(D_173240848,665036297)", + "equals(D_173240848,200837530)", + "equals(D_173240848,990319383)", + "equals(D_173240848,487917585)", + "equals(D_173240848,482225200)", + "equals(D_173240848,295976386)", + "equals(D_173240848,764891959)", + "equals(D_173240848,248374037)", + "equals(D_173240848,139822395)", + "valueIsOneOf(\"D_173240848\",807835037) or valueLength(\"D_195093589\")>0", + "valueLength('D_195093589')>0", + "doesNotExist('D_195093589')", + "equals(D_173240848,178420302)", + "isNotDefined(D_694265648,0)", + "or(equals(D_694265648,0),or(isNotDefined(D_694265648,0),greaterThanOrEqual(D_694265648,2)))", + "1==1", + "1>1", + "equals(isNotDefined(D_406098499_1_1,false),false)", + "doesNotEqual(isNotDefined(D_406098499_1_1,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_1_1,false),false),greaterThan(1,1))", + "valueIsOneOf(\"D_992987417\",353358909,288105839,626558982)", + "equals(D_579563781_1_1,654207589)", + "equals(D_579563781_1_1,536341288)", + "and(doesNotEqual(D_579563781_1_1,654207589),doesNotEqual(D_579563781_1_1,536341288))", + "equals(D_890637099_1_1,353358909)", + "doesNotEqual(D_890637099_1_1,353358909)", + "equals(D_578895128_1_1,939782495)", + "equals(D_578895128_1_1,135725957)", + "equals(D_578895128_1_1,518416174)", + "equals(D_578895128_1_1,847945207)", + "equals(D_578895128_1_1,283025574)", + "equals(D_578895128_1_1,942970912)", + "equals(D_578895128_1_1,596122041)", + "equals(D_578895128_1_1,489400183)", + "equals(D_578895128_1_1,863246236)", + "equals(D_578895128_1_1,607793249)", + "equals(D_578895128_1_1,532172400)", + "equals(D_578895128_1_1,754745617)", + "equals(D_578895128_1_1,665036297)", + "equals(D_578895128_1_1,200837530)", + "equals(D_578895128_1_1,990319383)", + "equals(D_578895128_1_1,487917585)", + "equals(D_578895128_1_1,603181162)", + "equals(D_578895128_1_1,482225200)", + "equals(D_578895128_1_1,295976386)", + "equals(D_578895128_1_1,764891959)", + "equals(D_578895128_1_1,248374037)", + "equals(D_578895128_1_1,139822395)", + "equals(D_578895128_1_1,723614811)", + "exists('D_957429734_1_1')", + "doesNotExist('D_957429734_1_1')", + "selectionCount(\"D_578895128_1_1\",true)>0 or valueLength(\"D_957429734_1_1\")>0", + "valueLength('D_406098499_1_1')>0", + "equals(D_579563781_1_1,178420302)", + "allExist('D_807431780_1_1','D_578895128_1_1')", + "equals(D_807431780_1_1,353358909)", + "equals(D_807431780_1_1,104430631)", + "valueIsOneOf('D_589588769_1_1',555374628)", + "valueIsOneOf('D_589588769_1_1',871673221)", + "valueIsOneOf('D_589588769_1_1',198654048)", + "valueIsOneOf('D_807431780_1_1',353358909)", + "equals(D_607773106_1_1,104430631)", + "equals(D_607773106_1_1,353358909)", + "equals(D_607773106_1_1,178420302)", + "2==1", + "2>1", + "equals(isNotDefined(D_406098499_2_2,false),false)", + "doesNotEqual(isNotDefined(D_406098499_2_2,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_2_2,false),false),greaterThan(2,1))", + "equals(D_579563781_2_2,654207589)", + "equals(D_579563781_2_2,536341288)", + "and(doesNotEqual(D_579563781_2_2,654207589),doesNotEqual(D_579563781_2_2,536341288))", + "equals(D_890637099_2_2,353358909)", + "doesNotEqual(D_890637099_2_2,353358909)", + "equals(D_578895128_2_2,939782495)", + "equals(D_578895128_2_2,135725957)", + "equals(D_578895128_2_2,518416174)", + "equals(D_578895128_2_2,847945207)", + "equals(D_578895128_2_2,283025574)", + "equals(D_578895128_2_2,942970912)", + "equals(D_578895128_2_2,596122041)", + "equals(D_578895128_2_2,489400183)", + "equals(D_578895128_2_2,863246236)", + "equals(D_578895128_2_2,607793249)", + "equals(D_578895128_2_2,532172400)", + "equals(D_578895128_2_2,754745617)", + "equals(D_578895128_2_2,665036297)", + "equals(D_578895128_2_2,200837530)", + "equals(D_578895128_2_2,990319383)", + "equals(D_578895128_2_2,487917585)", + "equals(D_578895128_2_2,603181162)", + "equals(D_578895128_2_2,482225200)", + "equals(D_578895128_2_2,295976386)", + "equals(D_578895128_2_2,764891959)", + "equals(D_578895128_2_2,248374037)", + "equals(D_578895128_2_2,139822395)", + "equals(D_578895128_2_2,723614811)", + "exists('D_957429734_2_2')", + "doesNotExist('D_957429734_2_2')", + "selectionCount(\"D_578895128_2_2\",true)>0 or valueLength(\"D_957429734_2_2\")>0", + "valueLength('D_406098499_2_2')>0", + "equals(D_579563781_2_2,178420302)", + "allExist('D_807431780_2_2','D_578895128_2_2')", + "equals(D_807431780_2_2,353358909)", + "equals(D_807431780_2_2,104430631)", + "valueIsOneOf('D_589588769_2_2',555374628)", + "valueIsOneOf('D_589588769_2_2',871673221)", + "valueIsOneOf('D_589588769_2_2',198654048)", + "valueIsOneOf('D_807431780_2_2',353358909)", + "equals(D_607773106_2_2,104430631)", + "equals(D_607773106_2_2,353358909)", + "equals(D_607773106_2_2,178420302)", + "3==1", + "3>1", + "equals(isNotDefined(D_406098499_3_3,false),false)", + "doesNotEqual(isNotDefined(D_406098499_3_3,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_3_3,false),false),greaterThan(3,1))", + "equals(D_579563781_3_3,654207589)", + "equals(D_579563781_3_3,536341288)", + "and(doesNotEqual(D_579563781_3_3,654207589),doesNotEqual(D_579563781_3_3,536341288))", + "equals(D_890637099_3_3,353358909)", + "doesNotEqual(D_890637099_3_3,353358909)", + "equals(D_578895128_3_3,939782495)", + "equals(D_578895128_3_3,135725957)", + "equals(D_578895128_3_3,518416174)", + "equals(D_578895128_3_3,847945207)", + "equals(D_578895128_3_3,283025574)", + "equals(D_578895128_3_3,942970912)", + "equals(D_578895128_3_3,596122041)", + "equals(D_578895128_3_3,489400183)", + "equals(D_578895128_3_3,863246236)", + "equals(D_578895128_3_3,607793249)", + "equals(D_578895128_3_3,532172400)", + "equals(D_578895128_3_3,754745617)", + "equals(D_578895128_3_3,665036297)", + "equals(D_578895128_3_3,200837530)", + "equals(D_578895128_3_3,990319383)", + "equals(D_578895128_3_3,487917585)", + "equals(D_578895128_3_3,603181162)", + "equals(D_578895128_3_3,482225200)", + "equals(D_578895128_3_3,295976386)", + "equals(D_578895128_3_3,764891959)", + "equals(D_578895128_3_3,248374037)", + "equals(D_578895128_3_3,139822395)", + "equals(D_578895128_3_3,723614811)", + "exists('D_957429734_3_3')", + "doesNotExist('D_957429734_3_3')", + "selectionCount(\"D_578895128_3_3\",true)>0 or valueLength(\"D_957429734_3_3\")>0", + "valueLength('D_406098499_3_3')>0", + "equals(D_579563781_3_3,178420302)", + "allExist('D_807431780_3_3','D_578895128_3_3')", + "equals(D_807431780_3_3,353358909)", + "equals(D_807431780_3_3,104430631)", + "valueIsOneOf('D_589588769_3_3',555374628)", + "valueIsOneOf('D_589588769_3_3',871673221)", + "valueIsOneOf('D_589588769_3_3',198654048)", + "valueIsOneOf('D_807431780_3_3',353358909)", + "equals(D_607773106_3_3,104430631)", + "equals(D_607773106_3_3,353358909)", + "equals(D_607773106_3_3,178420302)", + "4==1", + "4>1", + "equals(isNotDefined(D_406098499_4_4,false),false)", + "doesNotEqual(isNotDefined(D_406098499_4_4,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_4_4,false),false),greaterThan(4,1))", + "equals(D_579563781_4_4,654207589)", + "equals(D_579563781_4_4,536341288)", + "and(doesNotEqual(D_579563781_4_4,654207589),doesNotEqual(D_579563781_4_4,536341288))", + "equals(D_890637099_4_4,353358909)", + "doesNotEqual(D_890637099_4_4,353358909)", + "equals(D_578895128_4_4,939782495)", + "equals(D_578895128_4_4,135725957)", + "equals(D_578895128_4_4,518416174)", + "equals(D_578895128_4_4,847945207)", + "equals(D_578895128_4_4,283025574)", + "equals(D_578895128_4_4,942970912)", + "equals(D_578895128_4_4,596122041)", + "equals(D_578895128_4_4,489400183)", + "equals(D_578895128_4_4,863246236)", + "equals(D_578895128_4_4,607793249)", + "equals(D_578895128_4_4,532172400)", + "equals(D_578895128_4_4,754745617)", + "equals(D_578895128_4_4,665036297)", + "equals(D_578895128_4_4,200837530)", + "equals(D_578895128_4_4,990319383)", + "equals(D_578895128_4_4,487917585)", + "equals(D_578895128_4_4,603181162)", + "equals(D_578895128_4_4,482225200)", + "equals(D_578895128_4_4,295976386)", + "equals(D_578895128_4_4,764891959)", + "equals(D_578895128_4_4,248374037)", + "equals(D_578895128_4_4,139822395)", + "equals(D_578895128_4_4,723614811)", + "exists('D_957429734_4_4')", + "doesNotExist('D_957429734_4_4')", + "selectionCount(\"D_578895128_4_4\",true)>0 or valueLength(\"D_957429734_4_4\")>0", + "valueLength('D_406098499_4_4')>0", + "equals(D_579563781_4_4,178420302)", + "allExist('D_807431780_4_4','D_578895128_4_4')", + "equals(D_807431780_4_4,353358909)", + "equals(D_807431780_4_4,104430631)", + "valueIsOneOf('D_589588769_4_4',555374628)", + "valueIsOneOf('D_589588769_4_4',871673221)", + "valueIsOneOf('D_589588769_4_4',198654048)", + "valueIsOneOf('D_807431780_4_4',353358909)", + "equals(D_607773106_4_4,104430631)", + "equals(D_607773106_4_4,353358909)", + "equals(D_607773106_4_4,178420302)", + "5==1", + "5>1", + "equals(isNotDefined(D_406098499_5_5,false),false)", + "doesNotEqual(isNotDefined(D_406098499_5_5,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_5_5,false),false),greaterThan(5,1))", + "equals(D_579563781_5_5,654207589)", + "equals(D_579563781_5_5,536341288)", + "and(doesNotEqual(D_579563781_5_5,654207589),doesNotEqual(D_579563781_5_5,536341288))", + "equals(D_890637099_5_5,353358909)", + "doesNotEqual(D_890637099_5_5,353358909)", + "equals(D_578895128_5_5,939782495)", + "equals(D_578895128_5_5,135725957)", + "equals(D_578895128_5_5,518416174)", + "equals(D_578895128_5_5,847945207)", + "equals(D_578895128_5_5,283025574)", + "equals(D_578895128_5_5,942970912)", + "equals(D_578895128_5_5,596122041)", + "equals(D_578895128_5_5,489400183)", + "equals(D_578895128_5_5,863246236)", + "equals(D_578895128_5_5,607793249)", + "equals(D_578895128_5_5,532172400)", + "equals(D_578895128_5_5,754745617)", + "equals(D_578895128_5_5,665036297)", + "equals(D_578895128_5_5,200837530)", + "equals(D_578895128_5_5,990319383)", + "equals(D_578895128_5_5,487917585)", + "equals(D_578895128_5_5,603181162)", + "equals(D_578895128_5_5,482225200)", + "equals(D_578895128_5_5,295976386)", + "equals(D_578895128_5_5,764891959)", + "equals(D_578895128_5_5,248374037)", + "equals(D_578895128_5_5,139822395)", + "equals(D_578895128_5_5,723614811)", + "exists('D_957429734_5_5')", + "doesNotExist('D_957429734_5_5')", + "selectionCount(\"D_578895128_5_5\",true)>0 or valueLength(\"D_957429734_5_5\")>0", + "valueLength('D_406098499_5_5')>0", + "equals(D_579563781_5_5,178420302)", + "allExist('D_807431780_5_5','D_578895128_5_5')", + "equals(D_807431780_5_5,353358909)", + "equals(D_807431780_5_5,104430631)", + "valueIsOneOf('D_589588769_5_5',555374628)", + "valueIsOneOf('D_589588769_5_5',871673221)", + "valueIsOneOf('D_589588769_5_5',198654048)", + "valueIsOneOf('D_807431780_5_5',353358909)", + "equals(D_607773106_5_5,104430631)", + "equals(D_607773106_5_5,353358909)", + "equals(D_607773106_5_5,178420302)", + "6==1", + "6>1", + "equals(isNotDefined(D_406098499_6_6,false),false)", + "doesNotEqual(isNotDefined(D_406098499_6_6,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_6_6,false),false),greaterThan(6,1))", + "equals(D_579563781_6_6,654207589)", + "equals(D_579563781_6_6,536341288)", + "and(doesNotEqual(D_579563781_6_6,654207589),doesNotEqual(D_579563781_6_6,536341288))", + "equals(D_890637099_6_6,353358909)", + "doesNotEqual(D_890637099_6_6,353358909)", + "equals(D_578895128_6_6,939782495)", + "equals(D_578895128_6_6,135725957)", + "equals(D_578895128_6_6,518416174)", + "equals(D_578895128_6_6,847945207)", + "equals(D_578895128_6_6,283025574)", + "equals(D_578895128_6_6,942970912)", + "equals(D_578895128_6_6,596122041)", + "equals(D_578895128_6_6,489400183)", + "equals(D_578895128_6_6,863246236)", + "equals(D_578895128_6_6,607793249)", + "equals(D_578895128_6_6,532172400)", + "equals(D_578895128_6_6,754745617)", + "equals(D_578895128_6_6,665036297)", + "equals(D_578895128_6_6,200837530)", + "equals(D_578895128_6_6,990319383)", + "equals(D_578895128_6_6,487917585)", + "equals(D_578895128_6_6,603181162)", + "equals(D_578895128_6_6,482225200)", + "equals(D_578895128_6_6,295976386)", + "equals(D_578895128_6_6,764891959)", + "equals(D_578895128_6_6,248374037)", + "equals(D_578895128_6_6,139822395)", + "equals(D_578895128_6_6,723614811)", + "exists('D_957429734_6_6')", + "doesNotExist('D_957429734_6_6')", + "selectionCount(\"D_578895128_6_6\",true)>0 or valueLength(\"D_957429734_6_6\")>0", + "valueLength('D_406098499_6_6')>0", + "equals(D_579563781_6_6,178420302)", + "allExist('D_807431780_6_6','D_578895128_6_6')", + "equals(D_807431780_6_6,353358909)", + "equals(D_807431780_6_6,104430631)", + "valueIsOneOf('D_589588769_6_6',555374628)", + "valueIsOneOf('D_589588769_6_6',871673221)", + "valueIsOneOf('D_589588769_6_6',198654048)", + "valueIsOneOf('D_807431780_6_6',353358909)", + "equals(D_607773106_6_6,104430631)", + "equals(D_607773106_6_6,353358909)", + "equals(D_607773106_6_6,178420302)", + "7==1", + "7>1", + "equals(isNotDefined(D_406098499_7_7,false),false)", + "doesNotEqual(isNotDefined(D_406098499_7_7,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_7_7,false),false),greaterThan(7,1))", + "equals(D_579563781_7_7,654207589)", + "equals(D_579563781_7_7,536341288)", + "and(doesNotEqual(D_579563781_7_7,654207589),doesNotEqual(D_579563781_7_7,536341288))", + "equals(D_890637099_7_7,353358909)", + "doesNotEqual(D_890637099_7_7,353358909)", + "equals(D_578895128_7_7,939782495)", + "equals(D_578895128_7_7,135725957)", + "equals(D_578895128_7_7,518416174)", + "equals(D_578895128_7_7,847945207)", + "equals(D_578895128_7_7,283025574)", + "equals(D_578895128_7_7,942970912)", + "equals(D_578895128_7_7,596122041)", + "equals(D_578895128_7_7,489400183)", + "equals(D_578895128_7_7,863246236)", + "equals(D_578895128_7_7,607793249)", + "equals(D_578895128_7_7,532172400)", + "equals(D_578895128_7_7,754745617)", + "equals(D_578895128_7_7,665036297)", + "equals(D_578895128_7_7,200837530)", + "equals(D_578895128_7_7,990319383)", + "equals(D_578895128_7_7,487917585)", + "equals(D_578895128_7_7,603181162)", + "equals(D_578895128_7_7,482225200)", + "equals(D_578895128_7_7,295976386)", + "equals(D_578895128_7_7,764891959)", + "equals(D_578895128_7_7,248374037)", + "equals(D_578895128_7_7,139822395)", + "equals(D_578895128_7_7,723614811)", + "exists('D_957429734_7_7')", + "doesNotExist('D_957429734_7_7')", + "selectionCount(\"D_578895128_7_7\",true)>0 or valueLength(\"D_957429734_7_7\")>0", + "valueLength('D_406098499_7_7')>0", + "equals(D_579563781_7_7,178420302)", + "allExist('D_807431780_7_7','D_578895128_7_7')", + "equals(D_807431780_7_7,353358909)", + "equals(D_807431780_7_7,104430631)", + "valueIsOneOf('D_589588769_7_7',555374628)", + "valueIsOneOf('D_589588769_7_7',871673221)", + "valueIsOneOf('D_589588769_7_7',198654048)", + "valueIsOneOf('D_807431780_7_7',353358909)", + "equals(D_607773106_7_7,104430631)", + "equals(D_607773106_7_7,353358909)", + "equals(D_607773106_7_7,178420302)", + "8==1", + "8>1", + "equals(isNotDefined(D_406098499_8_8,false),false)", + "doesNotEqual(isNotDefined(D_406098499_8_8,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_8_8,false),false),greaterThan(8,1))", + "equals(D_579563781_8_8,654207589)", + "equals(D_579563781_8_8,536341288)", + "and(doesNotEqual(D_579563781_8_8,654207589),doesNotEqual(D_579563781_8_8,536341288))", + "equals(D_890637099_8_8,353358909)", + "doesNotEqual(D_890637099_8_8,353358909)", + "equals(D_578895128_8_8,939782495)", + "equals(D_578895128_8_8,135725957)", + "equals(D_578895128_8_8,518416174)", + "equals(D_578895128_8_8,847945207)", + "equals(D_578895128_8_8,283025574)", + "equals(D_578895128_8_8,942970912)", + "equals(D_578895128_8_8,596122041)", + "equals(D_578895128_8_8,489400183)", + "equals(D_578895128_8_8,863246236)", + "equals(D_578895128_8_8,607793249)", + "equals(D_578895128_8_8,532172400)", + "equals(D_578895128_8_8,754745617)", + "equals(D_578895128_8_8,665036297)", + "equals(D_578895128_8_8,200837530)", + "equals(D_578895128_8_8,990319383)", + "equals(D_578895128_8_8,487917585)", + "equals(D_578895128_8_8,603181162)", + "equals(D_578895128_8_8,482225200)", + "equals(D_578895128_8_8,295976386)", + "equals(D_578895128_8_8,764891959)", + "equals(D_578895128_8_8,248374037)", + "equals(D_578895128_8_8,139822395)", + "equals(D_578895128_8_8,723614811)", + "exists('D_957429734_8_8')", + "doesNotExist('D_957429734_8_8')", + "selectionCount(\"D_578895128_8_8\",true)>0 or valueLength(\"D_957429734_8_8\")>0", + "valueLength('D_406098499_8_8')>0", + "equals(D_579563781_8_8,178420302)", + "allExist('D_807431780_8_8','D_578895128_8_8')", + "equals(D_807431780_8_8,353358909)", + "equals(D_807431780_8_8,104430631)", + "valueIsOneOf('D_589588769_8_8',555374628)", + "valueIsOneOf('D_589588769_8_8',871673221)", + "valueIsOneOf('D_589588769_8_8',198654048)", + "valueIsOneOf('D_807431780_8_8',353358909)", + "equals(D_607773106_8_8,104430631)", + "equals(D_607773106_8_8,353358909)", + "equals(D_607773106_8_8,178420302)", + "9==1", + "9>1", + "equals(isNotDefined(D_406098499_9_9,false),false)", + "doesNotEqual(isNotDefined(D_406098499_9_9,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_9_9,false),false),greaterThan(9,1))", + "equals(D_579563781_9_9,654207589)", + "equals(D_579563781_9_9,536341288)", + "and(doesNotEqual(D_579563781_9_9,654207589),doesNotEqual(D_579563781_9_9,536341288))", + "equals(D_890637099_9_9,353358909)", + "doesNotEqual(D_890637099_9_9,353358909)", + "equals(D_578895128_9_9,939782495)", + "equals(D_578895128_9_9,135725957)", + "equals(D_578895128_9_9,518416174)", + "equals(D_578895128_9_9,847945207)", + "equals(D_578895128_9_9,283025574)", + "equals(D_578895128_9_9,942970912)", + "equals(D_578895128_9_9,596122041)", + "equals(D_578895128_9_9,489400183)", + "equals(D_578895128_9_9,863246236)", + "equals(D_578895128_9_9,607793249)", + "equals(D_578895128_9_9,532172400)", + "equals(D_578895128_9_9,754745617)", + "equals(D_578895128_9_9,665036297)", + "equals(D_578895128_9_9,200837530)", + "equals(D_578895128_9_9,990319383)", + "equals(D_578895128_9_9,487917585)", + "equals(D_578895128_9_9,603181162)", + "equals(D_578895128_9_9,482225200)", + "equals(D_578895128_9_9,295976386)", + "equals(D_578895128_9_9,764891959)", + "equals(D_578895128_9_9,248374037)", + "equals(D_578895128_9_9,139822395)", + "equals(D_578895128_9_9,723614811)", + "exists('D_957429734_9_9')", + "doesNotExist('D_957429734_9_9')", + "selectionCount(\"D_578895128_9_9\",true)>0 or valueLength(\"D_957429734_9_9\")>0", + "valueLength('D_406098499_9_9')>0", + "equals(D_579563781_9_9,178420302)", + "allExist('D_807431780_9_9','D_578895128_9_9')", + "equals(D_807431780_9_9,353358909)", + "equals(D_807431780_9_9,104430631)", + "valueIsOneOf('D_589588769_9_9',555374628)", + "valueIsOneOf('D_589588769_9_9',871673221)", + "valueIsOneOf('D_589588769_9_9',198654048)", + "valueIsOneOf('D_807431780_9_9',353358909)", + "equals(D_607773106_9_9,104430631)", + "equals(D_607773106_9_9,353358909)", + "equals(D_607773106_9_9,178420302)", + "10==1", + "10>1", + "equals(isNotDefined(D_406098499_10_10,false),false)", + "doesNotEqual(isNotDefined(D_406098499_10_10,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_10_10,false),false),greaterThan(10,1))", + "equals(D_579563781_10_10,654207589)", + "equals(D_579563781_10_10,536341288)", + "and(doesNotEqual(D_579563781_10_10,654207589),doesNotEqual(D_579563781_10_10,536341288))", + "equals(D_890637099_10_10,353358909)", + "doesNotEqual(D_890637099_10_10,353358909)", + "equals(D_578895128_10_10,939782495)", + "equals(D_578895128_10_10,135725957)", + "equals(D_578895128_10_10,518416174)", + "equals(D_578895128_10_10,847945207)", + "equals(D_578895128_10_10,283025574)", + "equals(D_578895128_10_10,942970912)", + "equals(D_578895128_10_10,596122041)", + "equals(D_578895128_10_10,489400183)", + "equals(D_578895128_10_10,863246236)", + "equals(D_578895128_10_10,607793249)", + "equals(D_578895128_10_10,532172400)", + "equals(D_578895128_10_10,754745617)", + "equals(D_578895128_10_10,665036297)", + "equals(D_578895128_10_10,200837530)", + "equals(D_578895128_10_10,990319383)", + "equals(D_578895128_10_10,487917585)", + "equals(D_578895128_10_10,603181162)", + "equals(D_578895128_10_10,482225200)", + "equals(D_578895128_10_10,295976386)", + "equals(D_578895128_10_10,764891959)", + "equals(D_578895128_10_10,248374037)", + "equals(D_578895128_10_10,139822395)", + "equals(D_578895128_10_10,723614811)", + "exists('D_957429734_10_10')", + "doesNotExist('D_957429734_10_10')", + "selectionCount(\"D_578895128_10_10\",true)>0 or valueLength(\"D_957429734_10_10\")>0", + "valueLength('D_406098499_10_10')>0", + "equals(D_579563781_10_10,178420302)", + "allExist('D_807431780_10_10','D_578895128_10_10')", + "equals(D_807431780_10_10,353358909)", + "equals(D_807431780_10_10,104430631)", + "valueIsOneOf('D_589588769_10_10',555374628)", + "valueIsOneOf('D_589588769_10_10',871673221)", + "valueIsOneOf('D_589588769_10_10',198654048)", + "valueIsOneOf('D_807431780_10_10',353358909)", + "equals(D_607773106_10_10,104430631)", + "equals(D_607773106_10_10,353358909)", + "equals(D_607773106_10_10,178420302)", + "11==1", + "11>1", + "equals(isNotDefined(D_406098499_11_11,false),false)", + "doesNotEqual(isNotDefined(D_406098499_11_11,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_11_11,false),false),greaterThan(11,1))", + "equals(D_579563781_11_11,654207589)", + "equals(D_579563781_11_11,536341288)", + "and(doesNotEqual(D_579563781_11_11,654207589),doesNotEqual(D_579563781_11_11,536341288))", + "equals(D_890637099_11_11,353358909)", + "doesNotEqual(D_890637099_11_11,353358909)", + "equals(D_578895128_11_11,939782495)", + "equals(D_578895128_11_11,135725957)", + "equals(D_578895128_11_11,518416174)", + "equals(D_578895128_11_11,847945207)", + "equals(D_578895128_11_11,283025574)", + "equals(D_578895128_11_11,942970912)", + "equals(D_578895128_11_11,596122041)", + "equals(D_578895128_11_11,489400183)", + "equals(D_578895128_11_11,863246236)", + "equals(D_578895128_11_11,607793249)", + "equals(D_578895128_11_11,532172400)", + "equals(D_578895128_11_11,754745617)", + "equals(D_578895128_11_11,665036297)", + "equals(D_578895128_11_11,200837530)", + "equals(D_578895128_11_11,990319383)", + "equals(D_578895128_11_11,487917585)", + "equals(D_578895128_11_11,603181162)", + "equals(D_578895128_11_11,482225200)", + "equals(D_578895128_11_11,295976386)", + "equals(D_578895128_11_11,764891959)", + "equals(D_578895128_11_11,248374037)", + "equals(D_578895128_11_11,139822395)", + "equals(D_578895128_11_11,723614811)", + "exists('D_957429734_11_11')", + "doesNotExist('D_957429734_11_11')", + "selectionCount(\"D_578895128_11_11\",true)>0 or valueLength(\"D_957429734_11_11\")>0", + "valueLength('D_406098499_11_11')>0", + "equals(D_579563781_11_11,178420302)", + "allExist('D_807431780_11_11','D_578895128_11_11')", + "equals(D_807431780_11_11,353358909)", + "equals(D_807431780_11_11,104430631)", + "valueIsOneOf('D_589588769_11_11',555374628)", + "valueIsOneOf('D_589588769_11_11',871673221)", + "valueIsOneOf('D_589588769_11_11',198654048)", + "valueIsOneOf('D_807431780_11_11',353358909)", + "equals(D_607773106_11_11,104430631)", + "equals(D_607773106_11_11,353358909)", + "equals(D_607773106_11_11,178420302)", + "12==1", + "12>1", + "equals(isNotDefined(D_406098499_12_12,false),false)", + "doesNotEqual(isNotDefined(D_406098499_12_12,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_12_12,false),false),greaterThan(12,1))", + "equals(D_579563781_12_12,654207589)", + "equals(D_579563781_12_12,536341288)", + "and(doesNotEqual(D_579563781_12_12,654207589),doesNotEqual(D_579563781_12_12,536341288))", + "equals(D_890637099_12_12,353358909)", + "doesNotEqual(D_890637099_12_12,353358909)", + "equals(D_578895128_12_12,939782495)", + "equals(D_578895128_12_12,135725957)", + "equals(D_578895128_12_12,518416174)", + "equals(D_578895128_12_12,847945207)", + "equals(D_578895128_12_12,283025574)", + "equals(D_578895128_12_12,942970912)", + "equals(D_578895128_12_12,596122041)", + "equals(D_578895128_12_12,489400183)", + "equals(D_578895128_12_12,863246236)", + "equals(D_578895128_12_12,607793249)", + "equals(D_578895128_12_12,532172400)", + "equals(D_578895128_12_12,754745617)", + "equals(D_578895128_12_12,665036297)", + "equals(D_578895128_12_12,200837530)", + "equals(D_578895128_12_12,990319383)", + "equals(D_578895128_12_12,487917585)", + "equals(D_578895128_12_12,603181162)", + "equals(D_578895128_12_12,482225200)", + "equals(D_578895128_12_12,295976386)", + "equals(D_578895128_12_12,764891959)", + "equals(D_578895128_12_12,248374037)", + "equals(D_578895128_12_12,139822395)", + "equals(D_578895128_12_12,723614811)", + "exists('D_957429734_12_12')", + "doesNotExist('D_957429734_12_12')", + "selectionCount(\"D_578895128_12_12\",true)>0 or valueLength(\"D_957429734_12_12\")>0", + "valueLength('D_406098499_12_12')>0", + "equals(D_579563781_12_12,178420302)", + "allExist('D_807431780_12_12','D_578895128_12_12')", + "equals(D_807431780_12_12,353358909)", + "equals(D_807431780_12_12,104430631)", + "valueIsOneOf('D_589588769_12_12',555374628)", + "valueIsOneOf('D_589588769_12_12',871673221)", + "valueIsOneOf('D_589588769_12_12',198654048)", + "valueIsOneOf('D_807431780_12_12',353358909)", + "equals(D_607773106_12_12,104430631)", + "equals(D_607773106_12_12,353358909)", + "equals(D_607773106_12_12,178420302)", + "13==1", + "13>1", + "equals(isNotDefined(D_406098499_13_13,false),false)", + "doesNotEqual(isNotDefined(D_406098499_13_13,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_13_13,false),false),greaterThan(13,1))", + "equals(D_579563781_13_13,654207589)", + "equals(D_579563781_13_13,536341288)", + "and(doesNotEqual(D_579563781_13_13,654207589),doesNotEqual(D_579563781_13_13,536341288))", + "equals(D_890637099_13_13,353358909)", + "doesNotEqual(D_890637099_13_13,353358909)", + "equals(D_578895128_13_13,939782495)", + "equals(D_578895128_13_13,135725957)", + "equals(D_578895128_13_13,518416174)", + "equals(D_578895128_13_13,847945207)", + "equals(D_578895128_13_13,283025574)", + "equals(D_578895128_13_13,942970912)", + "equals(D_578895128_13_13,596122041)", + "equals(D_578895128_13_13,489400183)", + "equals(D_578895128_13_13,863246236)", + "equals(D_578895128_13_13,607793249)", + "equals(D_578895128_13_13,532172400)", + "equals(D_578895128_13_13,754745617)", + "equals(D_578895128_13_13,665036297)", + "equals(D_578895128_13_13,200837530)", + "equals(D_578895128_13_13,990319383)", + "equals(D_578895128_13_13,487917585)", + "equals(D_578895128_13_13,603181162)", + "equals(D_578895128_13_13,482225200)", + "equals(D_578895128_13_13,295976386)", + "equals(D_578895128_13_13,764891959)", + "equals(D_578895128_13_13,248374037)", + "equals(D_578895128_13_13,139822395)", + "equals(D_578895128_13_13,723614811)", + "exists('D_957429734_13_13')", + "doesNotExist('D_957429734_13_13')", + "selectionCount(\"D_578895128_13_13\",true)>0 or valueLength(\"D_957429734_13_13\")>0", + "valueLength('D_406098499_13_13')>0", + "equals(D_579563781_13_13,178420302)", + "allExist('D_807431780_13_13','D_578895128_13_13')", + "equals(D_807431780_13_13,353358909)", + "equals(D_807431780_13_13,104430631)", + "valueIsOneOf('D_589588769_13_13',555374628)", + "valueIsOneOf('D_589588769_13_13',871673221)", + "valueIsOneOf('D_589588769_13_13',198654048)", + "valueIsOneOf('D_807431780_13_13',353358909)", + "equals(D_607773106_13_13,104430631)", + "equals(D_607773106_13_13,353358909)", + "equals(D_607773106_13_13,178420302)", + "14==1", + "14>1", + "equals(isNotDefined(D_406098499_14_14,false),false)", + "doesNotEqual(isNotDefined(D_406098499_14_14,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_14_14,false),false),greaterThan(14,1))", + "equals(D_579563781_14_14,654207589)", + "equals(D_579563781_14_14,536341288)", + "and(doesNotEqual(D_579563781_14_14,654207589),doesNotEqual(D_579563781_14_14,536341288))", + "equals(D_890637099_14_14,353358909)", + "doesNotEqual(D_890637099_14_14,353358909)", + "equals(D_578895128_14_14,939782495)", + "equals(D_578895128_14_14,135725957)", + "equals(D_578895128_14_14,518416174)", + "equals(D_578895128_14_14,847945207)", + "equals(D_578895128_14_14,283025574)", + "equals(D_578895128_14_14,942970912)", + "equals(D_578895128_14_14,596122041)", + "equals(D_578895128_14_14,489400183)", + "equals(D_578895128_14_14,863246236)", + "equals(D_578895128_14_14,607793249)", + "equals(D_578895128_14_14,532172400)", + "equals(D_578895128_14_14,754745617)", + "equals(D_578895128_14_14,665036297)", + "equals(D_578895128_14_14,200837530)", + "equals(D_578895128_14_14,990319383)", + "equals(D_578895128_14_14,487917585)", + "equals(D_578895128_14_14,603181162)", + "equals(D_578895128_14_14,482225200)", + "equals(D_578895128_14_14,295976386)", + "equals(D_578895128_14_14,764891959)", + "equals(D_578895128_14_14,248374037)", + "equals(D_578895128_14_14,139822395)", + "equals(D_578895128_14_14,723614811)", + "exists('D_957429734_14_14')", + "doesNotExist('D_957429734_14_14')", + "selectionCount(\"D_578895128_14_14\",true)>0 or valueLength(\"D_957429734_14_14\")>0", + "valueLength('D_406098499_14_14')>0", + "equals(D_579563781_14_14,178420302)", + "allExist('D_807431780_14_14','D_578895128_14_14')", + "equals(D_807431780_14_14,353358909)", + "equals(D_807431780_14_14,104430631)", + "valueIsOneOf('D_589588769_14_14',555374628)", + "valueIsOneOf('D_589588769_14_14',871673221)", + "valueIsOneOf('D_589588769_14_14',198654048)", + "valueIsOneOf('D_807431780_14_14',353358909)", + "equals(D_607773106_14_14,104430631)", + "equals(D_607773106_14_14,353358909)", + "equals(D_607773106_14_14,178420302)", + "15==1", + "15>1", + "equals(isNotDefined(D_406098499_15_15,false),false)", + "doesNotEqual(isNotDefined(D_406098499_15_15,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_15_15,false),false),greaterThan(15,1))", + "equals(D_579563781_15_15,654207589)", + "equals(D_579563781_15_15,536341288)", + "and(doesNotEqual(D_579563781_15_15,654207589),doesNotEqual(D_579563781_15_15,536341288))", + "equals(D_890637099_15_15,353358909)", + "doesNotEqual(D_890637099_15_15,353358909)", + "equals(D_578895128_15_15,939782495)", + "equals(D_578895128_15_15,135725957)", + "equals(D_578895128_15_15,518416174)", + "equals(D_578895128_15_15,847945207)", + "equals(D_578895128_15_15,283025574)", + "equals(D_578895128_15_15,942970912)", + "equals(D_578895128_15_15,596122041)", + "equals(D_578895128_15_15,489400183)", + "equals(D_578895128_15_15,863246236)", + "equals(D_578895128_15_15,607793249)", + "equals(D_578895128_15_15,532172400)", + "equals(D_578895128_15_15,754745617)", + "equals(D_578895128_15_15,665036297)", + "equals(D_578895128_15_15,200837530)", + "equals(D_578895128_15_15,990319383)", + "equals(D_578895128_15_15,487917585)", + "equals(D_578895128_15_15,603181162)", + "equals(D_578895128_15_15,482225200)", + "equals(D_578895128_15_15,295976386)", + "equals(D_578895128_15_15,764891959)", + "equals(D_578895128_15_15,248374037)", + "equals(D_578895128_15_15,139822395)", + "equals(D_578895128_15_15,723614811)", + "exists('D_957429734_15_15')", + "doesNotExist('D_957429734_15_15')", + "selectionCount(\"D_578895128_15_15\",true)>0 or valueLength(\"D_957429734_15_15\")>0", + "valueLength('D_406098499_15_15')>0", + "equals(D_579563781_15_15,178420302)", + "allExist('D_807431780_15_15','D_578895128_15_15')", + "equals(D_807431780_15_15,353358909)", + "equals(D_807431780_15_15,104430631)", + "valueIsOneOf('D_589588769_15_15',555374628)", + "valueIsOneOf('D_589588769_15_15',871673221)", + "valueIsOneOf('D_589588769_15_15',198654048)", + "valueIsOneOf('D_807431780_15_15',353358909)", + "equals(D_607773106_15_15,104430631)", + "equals(D_607773106_15_15,353358909)", + "equals(D_607773106_15_15,178420302)", + "16==1", + "16>1", + "equals(isNotDefined(D_406098499_16_16,false),false)", + "doesNotEqual(isNotDefined(D_406098499_16_16,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_16_16,false),false),greaterThan(16,1))", + "equals(D_579563781_16_16,654207589)", + "equals(D_579563781_16_16,536341288)", + "and(doesNotEqual(D_579563781_16_16,654207589),doesNotEqual(D_579563781_16_16,536341288))", + "equals(D_890637099_16_16,353358909)", + "doesNotEqual(D_890637099_16_16,353358909)", + "equals(D_578895128_16_16,939782495)", + "equals(D_578895128_16_16,135725957)", + "equals(D_578895128_16_16,518416174)", + "equals(D_578895128_16_16,847945207)", + "equals(D_578895128_16_16,283025574)", + "equals(D_578895128_16_16,942970912)", + "equals(D_578895128_16_16,596122041)", + "equals(D_578895128_16_16,489400183)", + "equals(D_578895128_16_16,863246236)", + "equals(D_578895128_16_16,607793249)", + "equals(D_578895128_16_16,532172400)", + "equals(D_578895128_16_16,754745617)", + "equals(D_578895128_16_16,665036297)", + "equals(D_578895128_16_16,200837530)", + "equals(D_578895128_16_16,990319383)", + "equals(D_578895128_16_16,487917585)", + "equals(D_578895128_16_16,603181162)", + "equals(D_578895128_16_16,482225200)", + "equals(D_578895128_16_16,295976386)", + "equals(D_578895128_16_16,764891959)", + "equals(D_578895128_16_16,248374037)", + "equals(D_578895128_16_16,139822395)", + "equals(D_578895128_16_16,723614811)", + "exists('D_957429734_16_16')", + "doesNotExist('D_957429734_16_16')", + "selectionCount(\"D_578895128_16_16\",true)>0 or valueLength(\"D_957429734_16_16\")>0", + "valueLength('D_406098499_16_16')>0", + "equals(D_579563781_16_16,178420302)", + "allExist('D_807431780_16_16','D_578895128_16_16')", + "equals(D_807431780_16_16,353358909)", + "equals(D_807431780_16_16,104430631)", + "valueIsOneOf('D_589588769_16_16',555374628)", + "valueIsOneOf('D_589588769_16_16',871673221)", + "valueIsOneOf('D_589588769_16_16',198654048)", + "valueIsOneOf('D_807431780_16_16',353358909)", + "equals(D_607773106_16_16,104430631)", + "equals(D_607773106_16_16,353358909)", + "equals(D_607773106_16_16,178420302)", + "17==1", + "17>1", + "equals(isNotDefined(D_406098499_17_17,false),false)", + "doesNotEqual(isNotDefined(D_406098499_17_17,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_17_17,false),false),greaterThan(17,1))", + "equals(D_579563781_17_17,654207589)", + "equals(D_579563781_17_17,536341288)", + "and(doesNotEqual(D_579563781_17_17,654207589),doesNotEqual(D_579563781_17_17,536341288))", + "equals(D_890637099_17_17,353358909)", + "doesNotEqual(D_890637099_17_17,353358909)", + "equals(D_578895128_17_17,939782495)", + "equals(D_578895128_17_17,135725957)", + "equals(D_578895128_17_17,518416174)", + "equals(D_578895128_17_17,847945207)", + "equals(D_578895128_17_17,283025574)", + "equals(D_578895128_17_17,942970912)", + "equals(D_578895128_17_17,596122041)", + "equals(D_578895128_17_17,489400183)", + "equals(D_578895128_17_17,863246236)", + "equals(D_578895128_17_17,607793249)", + "equals(D_578895128_17_17,532172400)", + "equals(D_578895128_17_17,754745617)", + "equals(D_578895128_17_17,665036297)", + "equals(D_578895128_17_17,200837530)", + "equals(D_578895128_17_17,990319383)", + "equals(D_578895128_17_17,487917585)", + "equals(D_578895128_17_17,603181162)", + "equals(D_578895128_17_17,482225200)", + "equals(D_578895128_17_17,295976386)", + "equals(D_578895128_17_17,764891959)", + "equals(D_578895128_17_17,248374037)", + "equals(D_578895128_17_17,139822395)", + "equals(D_578895128_17_17,723614811)", + "exists('D_957429734_17_17')", + "doesNotExist('D_957429734_17_17')", + "selectionCount(\"D_578895128_17_17\",true)>0 or valueLength(\"D_957429734_17_17\")>0", + "valueLength('D_406098499_17_17')>0", + "equals(D_579563781_17_17,178420302)", + "allExist('D_807431780_17_17','D_578895128_17_17')", + "equals(D_807431780_17_17,353358909)", + "equals(D_807431780_17_17,104430631)", + "valueIsOneOf('D_589588769_17_17',555374628)", + "valueIsOneOf('D_589588769_17_17',871673221)", + "valueIsOneOf('D_589588769_17_17',198654048)", + "valueIsOneOf('D_807431780_17_17',353358909)", + "equals(D_607773106_17_17,104430631)", + "equals(D_607773106_17_17,353358909)", + "equals(D_607773106_17_17,178420302)", + "18==1", + "18>1", + "equals(isNotDefined(D_406098499_18_18,false),false)", + "doesNotEqual(isNotDefined(D_406098499_18_18,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_18_18,false),false),greaterThan(18,1))", + "equals(D_579563781_18_18,654207589)", + "equals(D_579563781_18_18,536341288)", + "and(doesNotEqual(D_579563781_18_18,654207589),doesNotEqual(D_579563781_18_18,536341288))", + "equals(D_890637099_18_18,353358909)", + "doesNotEqual(D_890637099_18_18,353358909)", + "equals(D_578895128_18_18,939782495)", + "equals(D_578895128_18_18,135725957)", + "equals(D_578895128_18_18,518416174)", + "equals(D_578895128_18_18,847945207)", + "equals(D_578895128_18_18,283025574)", + "equals(D_578895128_18_18,942970912)", + "equals(D_578895128_18_18,596122041)", + "equals(D_578895128_18_18,489400183)", + "equals(D_578895128_18_18,863246236)", + "equals(D_578895128_18_18,607793249)", + "equals(D_578895128_18_18,532172400)", + "equals(D_578895128_18_18,754745617)", + "equals(D_578895128_18_18,665036297)", + "equals(D_578895128_18_18,200837530)", + "equals(D_578895128_18_18,990319383)", + "equals(D_578895128_18_18,487917585)", + "equals(D_578895128_18_18,603181162)", + "equals(D_578895128_18_18,482225200)", + "equals(D_578895128_18_18,295976386)", + "equals(D_578895128_18_18,764891959)", + "equals(D_578895128_18_18,248374037)", + "equals(D_578895128_18_18,139822395)", + "equals(D_578895128_18_18,723614811)", + "exists('D_957429734_18_18')", + "doesNotExist('D_957429734_18_18')", + "selectionCount(\"D_578895128_18_18\",true)>0 or valueLength(\"D_957429734_18_18\")>0", + "valueLength('D_406098499_18_18')>0", + "equals(D_579563781_18_18,178420302)", + "allExist('D_807431780_18_18','D_578895128_18_18')", + "equals(D_807431780_18_18,353358909)", + "equals(D_807431780_18_18,104430631)", + "valueIsOneOf('D_589588769_18_18',555374628)", + "valueIsOneOf('D_589588769_18_18',871673221)", + "valueIsOneOf('D_589588769_18_18',198654048)", + "valueIsOneOf('D_807431780_18_18',353358909)", + "equals(D_607773106_18_18,104430631)", + "equals(D_607773106_18_18,353358909)", + "equals(D_607773106_18_18,178420302)", + "19==1", + "19>1", + "equals(isNotDefined(D_406098499_19_19,false),false)", + "doesNotEqual(isNotDefined(D_406098499_19_19,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_19_19,false),false),greaterThan(19,1))", + "equals(D_579563781_19_19,654207589)", + "equals(D_579563781_19_19,536341288)", + "and(doesNotEqual(D_579563781_19_19,654207589),doesNotEqual(D_579563781_19_19,536341288))", + "equals(D_890637099_19_19,353358909)", + "doesNotEqual(D_890637099_19_19,353358909)", + "equals(D_578895128_19_19,939782495)", + "equals(D_578895128_19_19,135725957)", + "equals(D_578895128_19_19,518416174)", + "equals(D_578895128_19_19,847945207)", + "equals(D_578895128_19_19,283025574)", + "equals(D_578895128_19_19,942970912)", + "equals(D_578895128_19_19,596122041)", + "equals(D_578895128_19_19,489400183)", + "equals(D_578895128_19_19,863246236)", + "equals(D_578895128_19_19,607793249)", + "equals(D_578895128_19_19,532172400)", + "equals(D_578895128_19_19,754745617)", + "equals(D_578895128_19_19,665036297)", + "equals(D_578895128_19_19,200837530)", + "equals(D_578895128_19_19,990319383)", + "equals(D_578895128_19_19,487917585)", + "equals(D_578895128_19_19,603181162)", + "equals(D_578895128_19_19,482225200)", + "equals(D_578895128_19_19,295976386)", + "equals(D_578895128_19_19,764891959)", + "equals(D_578895128_19_19,248374037)", + "equals(D_578895128_19_19,139822395)", + "equals(D_578895128_19_19,723614811)", + "exists('D_957429734_19_19')", + "doesNotExist('D_957429734_19_19')", + "selectionCount(\"D_578895128_19_19\",true)>0 or valueLength(\"D_957429734_19_19\")>0", + "valueLength('D_406098499_19_19')>0", + "equals(D_579563781_19_19,178420302)", + "allExist('D_807431780_19_19','D_578895128_19_19')", + "equals(D_807431780_19_19,353358909)", + "equals(D_807431780_19_19,104430631)", + "valueIsOneOf('D_589588769_19_19',555374628)", + "valueIsOneOf('D_589588769_19_19',871673221)", + "valueIsOneOf('D_589588769_19_19',198654048)", + "valueIsOneOf('D_807431780_19_19',353358909)", + "equals(D_607773106_19_19,104430631)", + "equals(D_607773106_19_19,353358909)", + "equals(D_607773106_19_19,178420302)", + "20==1", + "20>1", + "equals(isNotDefined(D_406098499_20_20,false),false)", + "doesNotEqual(isNotDefined(D_406098499_20_20,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_20_20,false),false),greaterThan(20,1))", + "equals(D_579563781_20_20,654207589)", + "equals(D_579563781_20_20,536341288)", + "and(doesNotEqual(D_579563781_20_20,654207589),doesNotEqual(D_579563781_20_20,536341288))", + "equals(D_890637099_20_20,353358909)", + "doesNotEqual(D_890637099_20_20,353358909)", + "equals(D_578895128_20_20,939782495)", + "equals(D_578895128_20_20,135725957)", + "equals(D_578895128_20_20,518416174)", + "equals(D_578895128_20_20,847945207)", + "equals(D_578895128_20_20,283025574)", + "equals(D_578895128_20_20,942970912)", + "equals(D_578895128_20_20,596122041)", + "equals(D_578895128_20_20,489400183)", + "equals(D_578895128_20_20,863246236)", + "equals(D_578895128_20_20,607793249)", + "equals(D_578895128_20_20,532172400)", + "equals(D_578895128_20_20,754745617)", + "equals(D_578895128_20_20,665036297)", + "equals(D_578895128_20_20,200837530)", + "equals(D_578895128_20_20,990319383)", + "equals(D_578895128_20_20,487917585)", + "equals(D_578895128_20_20,603181162)", + "equals(D_578895128_20_20,482225200)", + "equals(D_578895128_20_20,295976386)", + "equals(D_578895128_20_20,764891959)", + "equals(D_578895128_20_20,248374037)", + "equals(D_578895128_20_20,139822395)", + "equals(D_578895128_20_20,723614811)", + "exists('D_957429734_20_20')", + "doesNotExist('D_957429734_20_20')", + "selectionCount(\"D_578895128_20_20\",true)>0 or valueLength(\"D_957429734_20_20\")>0", + "valueLength('D_406098499_20_20')>0", + "equals(D_579563781_20_20,178420302)", + "allExist('D_807431780_20_20','D_578895128_20_20')", + "equals(D_807431780_20_20,353358909)", + "equals(D_807431780_20_20,104430631)", + "valueIsOneOf('D_589588769_20_20',555374628)", + "valueIsOneOf('D_589588769_20_20',871673221)", + "valueIsOneOf('D_589588769_20_20',198654048)", + "valueIsOneOf('D_807431780_20_20',353358909)", + "equals(D_607773106_20_20,104430631)", + "equals(D_607773106_20_20,353358909)", + "equals(D_607773106_20_20,178420302)", + "21==1", + "21>1", + "equals(isNotDefined(D_406098499_21_21,false),false)", + "doesNotEqual(isNotDefined(D_406098499_21_21,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_21_21,false),false),greaterThan(21,1))", + "equals(D_579563781_21_21,654207589)", + "equals(D_579563781_21_21,536341288)", + "and(doesNotEqual(D_579563781_21_21,654207589),doesNotEqual(D_579563781_21_21,536341288))", + "equals(D_890637099_21_21,353358909)", + "doesNotEqual(D_890637099_21_21,353358909)", + "equals(D_578895128_21_21,939782495)", + "equals(D_578895128_21_21,135725957)", + "equals(D_578895128_21_21,518416174)", + "equals(D_578895128_21_21,847945207)", + "equals(D_578895128_21_21,283025574)", + "equals(D_578895128_21_21,942970912)", + "equals(D_578895128_21_21,596122041)", + "equals(D_578895128_21_21,489400183)", + "equals(D_578895128_21_21,863246236)", + "equals(D_578895128_21_21,607793249)", + "equals(D_578895128_21_21,532172400)", + "equals(D_578895128_21_21,754745617)", + "equals(D_578895128_21_21,665036297)", + "equals(D_578895128_21_21,200837530)", + "equals(D_578895128_21_21,990319383)", + "equals(D_578895128_21_21,487917585)", + "equals(D_578895128_21_21,603181162)", + "equals(D_578895128_21_21,482225200)", + "equals(D_578895128_21_21,295976386)", + "equals(D_578895128_21_21,764891959)", + "equals(D_578895128_21_21,248374037)", + "equals(D_578895128_21_21,139822395)", + "equals(D_578895128_21_21,723614811)", + "exists('D_957429734_21_21')", + "doesNotExist('D_957429734_21_21')", + "selectionCount(\"D_578895128_21_21\",true)>0 or valueLength(\"D_957429734_21_21\")>0", + "valueLength('D_406098499_21_21')>0", + "equals(D_579563781_21_21,178420302)", + "allExist('D_807431780_21_21','D_578895128_21_21')", + "equals(D_807431780_21_21,353358909)", + "equals(D_807431780_21_21,104430631)", + "valueIsOneOf('D_589588769_21_21',555374628)", + "valueIsOneOf('D_589588769_21_21',871673221)", + "valueIsOneOf('D_589588769_21_21',198654048)", + "valueIsOneOf('D_807431780_21_21',353358909)", + "equals(D_607773106_21_21,104430631)", + "equals(D_607773106_21_21,353358909)", + "equals(D_607773106_21_21,178420302)", + "22==1", + "22>1", + "equals(isNotDefined(D_406098499_22_22,false),false)", + "doesNotEqual(isNotDefined(D_406098499_22_22,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_22_22,false),false),greaterThan(22,1))", + "equals(D_579563781_22_22,654207589)", + "equals(D_579563781_22_22,536341288)", + "and(doesNotEqual(D_579563781_22_22,654207589),doesNotEqual(D_579563781_22_22,536341288))", + "equals(D_890637099_22_22,353358909)", + "doesNotEqual(D_890637099_22_22,353358909)", + "equals(D_578895128_22_22,939782495)", + "equals(D_578895128_22_22,135725957)", + "equals(D_578895128_22_22,518416174)", + "equals(D_578895128_22_22,847945207)", + "equals(D_578895128_22_22,283025574)", + "equals(D_578895128_22_22,942970912)", + "equals(D_578895128_22_22,596122041)", + "equals(D_578895128_22_22,489400183)", + "equals(D_578895128_22_22,863246236)", + "equals(D_578895128_22_22,607793249)", + "equals(D_578895128_22_22,532172400)", + "equals(D_578895128_22_22,754745617)", + "equals(D_578895128_22_22,665036297)", + "equals(D_578895128_22_22,200837530)", + "equals(D_578895128_22_22,990319383)", + "equals(D_578895128_22_22,487917585)", + "equals(D_578895128_22_22,603181162)", + "equals(D_578895128_22_22,482225200)", + "equals(D_578895128_22_22,295976386)", + "equals(D_578895128_22_22,764891959)", + "equals(D_578895128_22_22,248374037)", + "equals(D_578895128_22_22,139822395)", + "equals(D_578895128_22_22,723614811)", + "exists('D_957429734_22_22')", + "doesNotExist('D_957429734_22_22')", + "selectionCount(\"D_578895128_22_22\",true)>0 or valueLength(\"D_957429734_22_22\")>0", + "valueLength('D_406098499_22_22')>0", + "equals(D_579563781_22_22,178420302)", + "allExist('D_807431780_22_22','D_578895128_22_22')", + "equals(D_807431780_22_22,353358909)", + "equals(D_807431780_22_22,104430631)", + "valueIsOneOf('D_589588769_22_22',555374628)", + "valueIsOneOf('D_589588769_22_22',871673221)", + "valueIsOneOf('D_589588769_22_22',198654048)", + "valueIsOneOf('D_807431780_22_22',353358909)", + "equals(D_607773106_22_22,104430631)", + "equals(D_607773106_22_22,353358909)", + "equals(D_607773106_22_22,178420302)", + "23==1", + "23>1", + "equals(isNotDefined(D_406098499_23_23,false),false)", + "doesNotEqual(isNotDefined(D_406098499_23_23,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_23_23,false),false),greaterThan(23,1))", + "equals(D_579563781_23_23,654207589)", + "equals(D_579563781_23_23,536341288)", + "and(doesNotEqual(D_579563781_23_23,654207589),doesNotEqual(D_579563781_23_23,536341288))", + "equals(D_890637099_23_23,353358909)", + "doesNotEqual(D_890637099_23_23,353358909)", + "equals(D_578895128_23_23,939782495)", + "equals(D_578895128_23_23,135725957)", + "equals(D_578895128_23_23,518416174)", + "equals(D_578895128_23_23,847945207)", + "equals(D_578895128_23_23,283025574)", + "equals(D_578895128_23_23,942970912)", + "equals(D_578895128_23_23,596122041)", + "equals(D_578895128_23_23,489400183)", + "equals(D_578895128_23_23,863246236)", + "equals(D_578895128_23_23,607793249)", + "equals(D_578895128_23_23,532172400)", + "equals(D_578895128_23_23,754745617)", + "equals(D_578895128_23_23,665036297)", + "equals(D_578895128_23_23,200837530)", + "equals(D_578895128_23_23,990319383)", + "equals(D_578895128_23_23,487917585)", + "equals(D_578895128_23_23,603181162)", + "equals(D_578895128_23_23,482225200)", + "equals(D_578895128_23_23,295976386)", + "equals(D_578895128_23_23,764891959)", + "equals(D_578895128_23_23,248374037)", + "equals(D_578895128_23_23,139822395)", + "equals(D_578895128_23_23,723614811)", + "exists('D_957429734_23_23')", + "doesNotExist('D_957429734_23_23')", + "selectionCount(\"D_578895128_23_23\",true)>0 or valueLength(\"D_957429734_23_23\")>0", + "valueLength('D_406098499_23_23')>0", + "equals(D_579563781_23_23,178420302)", + "allExist('D_807431780_23_23','D_578895128_23_23')", + "equals(D_807431780_23_23,353358909)", + "equals(D_807431780_23_23,104430631)", + "valueIsOneOf('D_589588769_23_23',555374628)", + "valueIsOneOf('D_589588769_23_23',871673221)", + "valueIsOneOf('D_589588769_23_23',198654048)", + "valueIsOneOf('D_807431780_23_23',353358909)", + "equals(D_607773106_23_23,104430631)", + "equals(D_607773106_23_23,353358909)", + "equals(D_607773106_23_23,178420302)", + "24==1", + "24>1", + "equals(isNotDefined(D_406098499_24_24,false),false)", + "doesNotEqual(isNotDefined(D_406098499_24_24,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_24_24,false),false),greaterThan(24,1))", + "equals(D_579563781_24_24,654207589)", + "equals(D_579563781_24_24,536341288)", + "and(doesNotEqual(D_579563781_24_24,654207589),doesNotEqual(D_579563781_24_24,536341288))", + "equals(D_890637099_24_24,353358909)", + "doesNotEqual(D_890637099_24_24,353358909)", + "equals(D_578895128_24_24,939782495)", + "equals(D_578895128_24_24,135725957)", + "equals(D_578895128_24_24,518416174)", + "equals(D_578895128_24_24,847945207)", + "equals(D_578895128_24_24,283025574)", + "equals(D_578895128_24_24,942970912)", + "equals(D_578895128_24_24,596122041)", + "equals(D_578895128_24_24,489400183)", + "equals(D_578895128_24_24,863246236)", + "equals(D_578895128_24_24,607793249)", + "equals(D_578895128_24_24,532172400)", + "equals(D_578895128_24_24,754745617)", + "equals(D_578895128_24_24,665036297)", + "equals(D_578895128_24_24,200837530)", + "equals(D_578895128_24_24,990319383)", + "equals(D_578895128_24_24,487917585)", + "equals(D_578895128_24_24,603181162)", + "equals(D_578895128_24_24,482225200)", + "equals(D_578895128_24_24,295976386)", + "equals(D_578895128_24_24,764891959)", + "equals(D_578895128_24_24,248374037)", + "equals(D_578895128_24_24,139822395)", + "equals(D_578895128_24_24,723614811)", + "exists('D_957429734_24_24')", + "doesNotExist('D_957429734_24_24')", + "selectionCount(\"D_578895128_24_24\",true)>0 or valueLength(\"D_957429734_24_24\")>0", + "valueLength('D_406098499_24_24')>0", + "equals(D_579563781_24_24,178420302)", + "allExist('D_807431780_24_24','D_578895128_24_24')", + "equals(D_807431780_24_24,353358909)", + "equals(D_807431780_24_24,104430631)", + "valueIsOneOf('D_589588769_24_24',555374628)", + "valueIsOneOf('D_589588769_24_24',871673221)", + "valueIsOneOf('D_589588769_24_24',198654048)", + "valueIsOneOf('D_807431780_24_24',353358909)", + "equals(D_607773106_24_24,104430631)", + "equals(D_607773106_24_24,353358909)", + "equals(D_607773106_24_24,178420302)", + "25==1", + "25>1", + "equals(isNotDefined(D_406098499_25_25,false),false)", + "doesNotEqual(isNotDefined(D_406098499_25_25,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_25_25,false),false),greaterThan(25,1))", + "equals(D_579563781_25_25,654207589)", + "equals(D_579563781_25_25,536341288)", + "and(doesNotEqual(D_579563781_25_25,654207589),doesNotEqual(D_579563781_25_25,536341288))", + "equals(D_890637099_25_25,353358909)", + "doesNotEqual(D_890637099_25_25,353358909)", + "equals(D_578895128_25_25,939782495)", + "equals(D_578895128_25_25,135725957)", + "equals(D_578895128_25_25,518416174)", + "equals(D_578895128_25_25,847945207)", + "equals(D_578895128_25_25,283025574)", + "equals(D_578895128_25_25,942970912)", + "equals(D_578895128_25_25,596122041)", + "equals(D_578895128_25_25,489400183)", + "equals(D_578895128_25_25,863246236)", + "equals(D_578895128_25_25,607793249)", + "equals(D_578895128_25_25,532172400)", + "equals(D_578895128_25_25,754745617)", + "equals(D_578895128_25_25,665036297)", + "equals(D_578895128_25_25,200837530)", + "equals(D_578895128_25_25,990319383)", + "equals(D_578895128_25_25,487917585)", + "equals(D_578895128_25_25,603181162)", + "equals(D_578895128_25_25,482225200)", + "equals(D_578895128_25_25,295976386)", + "equals(D_578895128_25_25,764891959)", + "equals(D_578895128_25_25,248374037)", + "equals(D_578895128_25_25,139822395)", + "equals(D_578895128_25_25,723614811)", + "exists('D_957429734_25_25')", + "doesNotExist('D_957429734_25_25')", + "selectionCount(\"D_578895128_25_25\",true)>0 or valueLength(\"D_957429734_25_25\")>0", + "valueLength('D_406098499_25_25')>0", + "equals(D_579563781_25_25,178420302)", + "allExist('D_807431780_25_25','D_578895128_25_25')", + "equals(D_807431780_25_25,353358909)", + "equals(D_807431780_25_25,104430631)", + "valueIsOneOf('D_589588769_25_25',555374628)", + "valueIsOneOf('D_589588769_25_25',871673221)", + "valueIsOneOf('D_589588769_25_25',198654048)", + "valueIsOneOf('D_807431780_25_25',353358909)", + "equals(D_607773106_25_25,104430631)", + "equals(D_607773106_25_25,353358909)", + "equals(D_607773106_25_25,178420302)", + "isNotDefined(D_446999144,0)", + "or(equals(D_446999144,0),or(isNotDefined(D_446999144,0),greaterThanOrEqual(D_446999144,2)))", + "equals(isNotDefined(D_714001034_1_1,false),false)", + "doesNotEqual(isNotDefined(D_714001034_1_1,false),false)", + "greaterThan(D_446999144,1)", + "equals(D_887697329_1_1,654207589)", + "equals(D_887697329_1_1,536341288)", + "and(doesNotEqual(D_887697329_1_1,654207589),doesNotEqual(D_887697329_1_1,536341288))", + "equals(D_418392907_1_1,353358909)", + "doesNotEqual(D_418392907_1_1,353358909)", + "equals(D_812370563_1_1,939782495)", + "equals(D_812370563_1_1,135725957)", + "equals(D_812370563_1_1,518416174)", + "equals(D_812370563_1_1,847945207)", + "equals(D_812370563_1_1,283025574)", + "equals(D_812370563_1_1,942970912)", + "equals(D_812370563_1_1,596122041)", + "equals(D_812370563_1_1,489400183)", + "equals(D_812370563_1_1,863246236)", + "equals(D_812370563_1_1,607793249)", + "equals(D_812370563_1_1,532172400)", + "equals(D_812370563_1_1,754745617)", + "equals(D_812370563_1_1,665036297)", + "equals(D_812370563_1_1,200837530)", + "equals(D_812370563_1_1,990319383)", + "equals(D_812370563_1_1,487917585)", + "equals(D_812370563_1_1,603181162)", + "equals(D_812370563_1_1,482225200)", + "equals(D_812370563_1_1,295976386)", + "equals(D_812370563_1_1,764891959)", + "equals(D_812370563_1_1,248374037)", + "equals(D_812370563_1_1,139822395)", + "equals(D_812370563_1_1,723614811)", + "valueLength('D_933110091_1_1')>0", + "doesNotExist('D_933110091_1_1')", + "selectionCount(\"D_812370563_1_1\",true)>0 or valueLength(\"D_933110091_1_1\")>0", + "valueLength('D_714001034_1_1')>0", + "equals(D_887697329_1_1,178420302)", + "allExist('D_473529484_1_1','D_812370563_1_1')", + "equals(D_473529484_1_1,353358909)", + "equals(D_473529484_1_1,104430631)", + "equals(D_873968217_1_1,709650750)", + "equals(D_873968217_1_1,810290359)", + "equals(D_873968217_1_1,509607548)", + "equals(D_873968217_1_1,784922042)", + "equals(D_718867914_1_1,104430631)", + "equals(D_718867914_1_1,353358909)", + "equals(D_718867914_1_1,178420302)", + "equals(isNotDefined(D_714001034_2_2,false),false)", + "doesNotEqual(isNotDefined(D_714001034_2_2,false),false)", + "equals(D_887697329_2_2,654207589)", + "equals(D_887697329_2_2,536341288)", + "and(doesNotEqual(D_887697329_2_2,654207589),doesNotEqual(D_887697329_2_2,536341288))", + "equals(D_418392907_2_2,353358909)", + "doesNotEqual(D_418392907_2_2,353358909)", + "equals(D_812370563_2_2,939782495)", + "equals(D_812370563_2_2,135725957)", + "equals(D_812370563_2_2,518416174)", + "equals(D_812370563_2_2,847945207)", + "equals(D_812370563_2_2,283025574)", + "equals(D_812370563_2_2,942970912)", + "equals(D_812370563_2_2,596122041)", + "equals(D_812370563_2_2,489400183)", + "equals(D_812370563_2_2,863246236)", + "equals(D_812370563_2_2,607793249)", + "equals(D_812370563_2_2,532172400)", + "equals(D_812370563_2_2,754745617)", + "equals(D_812370563_2_2,665036297)", + "equals(D_812370563_2_2,200837530)", + "equals(D_812370563_2_2,990319383)", + "equals(D_812370563_2_2,487917585)", + "equals(D_812370563_2_2,603181162)", + "equals(D_812370563_2_2,482225200)", + "equals(D_812370563_2_2,295976386)", + "equals(D_812370563_2_2,764891959)", + "equals(D_812370563_2_2,248374037)", + "equals(D_812370563_2_2,139822395)", + "equals(D_812370563_2_2,723614811)", + "valueLength('D_933110091_2_2')>0", + "doesNotExist('D_933110091_2_2')", + "selectionCount(\"D_812370563_2_2\",true)>0 or valueLength(\"D_933110091_2_2\")>0", + "valueLength('D_714001034_2_2')>0", + "equals(D_887697329_2_2,178420302)", + "allExist('D_473529484_2_2','D_812370563_2_2')", + "equals(D_473529484_2_2,353358909)", + "equals(D_473529484_2_2,104430631)", + "equals(D_873968217_2_2,709650750)", + "equals(D_873968217_2_2,810290359)", + "equals(D_873968217_2_2,509607548)", + "equals(D_873968217_2_2,784922042)", + "equals(D_718867914_2_2,104430631)", + "equals(D_718867914_2_2,353358909)", + "equals(D_718867914_2_2,178420302)", + "equals(isNotDefined(D_714001034_3_3,false),false)", + "doesNotEqual(isNotDefined(D_714001034_3_3,false),false)", + "equals(D_887697329_3_3,654207589)", + "equals(D_887697329_3_3,536341288)", + "and(doesNotEqual(D_887697329_3_3,654207589),doesNotEqual(D_887697329_3_3,536341288))", + "equals(D_418392907_3_3,353358909)", + "doesNotEqual(D_418392907_3_3,353358909)", + "equals(D_812370563_3_3,939782495)", + "equals(D_812370563_3_3,135725957)", + "equals(D_812370563_3_3,518416174)", + "equals(D_812370563_3_3,847945207)", + "equals(D_812370563_3_3,283025574)", + "equals(D_812370563_3_3,942970912)", + "equals(D_812370563_3_3,596122041)", + "equals(D_812370563_3_3,489400183)", + "equals(D_812370563_3_3,863246236)", + "equals(D_812370563_3_3,607793249)", + "equals(D_812370563_3_3,532172400)", + "equals(D_812370563_3_3,754745617)", + "equals(D_812370563_3_3,665036297)", + "equals(D_812370563_3_3,200837530)", + "equals(D_812370563_3_3,990319383)", + "equals(D_812370563_3_3,487917585)", + "equals(D_812370563_3_3,603181162)", + "equals(D_812370563_3_3,482225200)", + "equals(D_812370563_3_3,295976386)", + "equals(D_812370563_3_3,764891959)", + "equals(D_812370563_3_3,248374037)", + "equals(D_812370563_3_3,139822395)", + "equals(D_812370563_3_3,723614811)", + "valueLength('D_933110091_3_3')>0", + "doesNotExist('D_933110091_3_3')", + "selectionCount(\"D_812370563_3_3\",true)>0 or valueLength(\"D_933110091_3_3\")>0", + "valueLength('D_714001034_3_3')>0", + "equals(D_887697329_3_3,178420302)", + "allExist('D_473529484_3_3','D_812370563_3_3')", + "equals(D_473529484_3_3,353358909)", + "equals(D_473529484_3_3,104430631)", + "equals(D_873968217_3_3,709650750)", + "equals(D_873968217_3_3,810290359)", + "equals(D_873968217_3_3,509607548)", + "equals(D_873968217_3_3,784922042)", + "equals(D_718867914_3_3,104430631)", + "equals(D_718867914_3_3,353358909)", + "equals(D_718867914_3_3,178420302)", + "equals(isNotDefined(D_714001034_4_4,false),false)", + "doesNotEqual(isNotDefined(D_714001034_4_4,false),false)", + "equals(D_887697329_4_4,654207589)", + "equals(D_887697329_4_4,536341288)", + "and(doesNotEqual(D_887697329_4_4,654207589),doesNotEqual(D_887697329_4_4,536341288))", + "equals(D_418392907_4_4,353358909)", + "doesNotEqual(D_418392907_4_4,353358909)", + "equals(D_812370563_4_4,939782495)", + "equals(D_812370563_4_4,135725957)", + "equals(D_812370563_4_4,518416174)", + "equals(D_812370563_4_4,847945207)", + "equals(D_812370563_4_4,283025574)", + "equals(D_812370563_4_4,942970912)", + "equals(D_812370563_4_4,596122041)", + "equals(D_812370563_4_4,489400183)", + "equals(D_812370563_4_4,863246236)", + "equals(D_812370563_4_4,607793249)", + "equals(D_812370563_4_4,532172400)", + "equals(D_812370563_4_4,754745617)", + "equals(D_812370563_4_4,665036297)", + "equals(D_812370563_4_4,200837530)", + "equals(D_812370563_4_4,990319383)", + "equals(D_812370563_4_4,487917585)", + "equals(D_812370563_4_4,603181162)", + "equals(D_812370563_4_4,482225200)", + "equals(D_812370563_4_4,295976386)", + "equals(D_812370563_4_4,764891959)", + "equals(D_812370563_4_4,248374037)", + "equals(D_812370563_4_4,139822395)", + "equals(D_812370563_4_4,723614811)", + "valueLength('D_933110091_4_4')>0", + "doesNotExist('D_933110091_4_4')", + "selectionCount(\"D_812370563_4_4\",true)>0 or valueLength(\"D_933110091_4_4\")>0", + "valueLength('D_714001034_4_4')>0", + "equals(D_887697329_4_4,178420302)", + "allExist('D_473529484_4_4','D_812370563_4_4')", + "equals(D_473529484_4_4,353358909)", + "equals(D_473529484_4_4,104430631)", + "equals(D_873968217_4_4,709650750)", + "equals(D_873968217_4_4,810290359)", + "equals(D_873968217_4_4,509607548)", + "equals(D_873968217_4_4,784922042)", + "equals(D_718867914_4_4,104430631)", + "equals(D_718867914_4_4,353358909)", + "equals(D_718867914_4_4,178420302)", + "equals(isNotDefined(D_714001034_5_5,false),false)", + "doesNotEqual(isNotDefined(D_714001034_5_5,false),false)", + "equals(D_887697329_5_5,654207589)", + "equals(D_887697329_5_5,536341288)", + "and(doesNotEqual(D_887697329_5_5,654207589),doesNotEqual(D_887697329_5_5,536341288))", + "equals(D_418392907_5_5,353358909)", + "doesNotEqual(D_418392907_5_5,353358909)", + "equals(D_812370563_5_5,939782495)", + "equals(D_812370563_5_5,135725957)", + "equals(D_812370563_5_5,518416174)", + "equals(D_812370563_5_5,847945207)", + "equals(D_812370563_5_5,283025574)", + "equals(D_812370563_5_5,942970912)", + "equals(D_812370563_5_5,596122041)", + "equals(D_812370563_5_5,489400183)", + "equals(D_812370563_5_5,863246236)", + "equals(D_812370563_5_5,607793249)", + "equals(D_812370563_5_5,532172400)", + "equals(D_812370563_5_5,754745617)", + "equals(D_812370563_5_5,665036297)", + "equals(D_812370563_5_5,200837530)", + "equals(D_812370563_5_5,990319383)", + "equals(D_812370563_5_5,487917585)", + "equals(D_812370563_5_5,603181162)", + "equals(D_812370563_5_5,482225200)", + "equals(D_812370563_5_5,295976386)", + "equals(D_812370563_5_5,764891959)", + "equals(D_812370563_5_5,248374037)", + "equals(D_812370563_5_5,139822395)", + "equals(D_812370563_5_5,723614811)", + "valueLength('D_933110091_5_5')>0", + "doesNotExist('D_933110091_5_5')", + "selectionCount(\"D_812370563_5_5\",true)>0 or valueLength(\"D_933110091_5_5\")>0", + "valueLength('D_714001034_5_5')>0", + "equals(D_887697329_5_5,178420302)", + "allExist('D_473529484_5_5','D_812370563_5_5')", + "equals(D_473529484_5_5,353358909)", + "equals(D_473529484_5_5,104430631)", + "equals(D_873968217_5_5,709650750)", + "equals(D_873968217_5_5,810290359)", + "equals(D_873968217_5_5,509607548)", + "equals(D_873968217_5_5,784922042)", + "equals(D_718867914_5_5,104430631)", + "equals(D_718867914_5_5,353358909)", + "equals(D_718867914_5_5,178420302)", + "equals(isNotDefined(D_714001034_6_6,false),false)", + "doesNotEqual(isNotDefined(D_714001034_6_6,false),false)", + "equals(D_887697329_6_6,654207589)", + "equals(D_887697329_6_6,536341288)", + "and(doesNotEqual(D_887697329_6_6,654207589),doesNotEqual(D_887697329_6_6,536341288))", + "equals(D_418392907_6_6,353358909)", + "doesNotEqual(D_418392907_6_6,353358909)", + "equals(D_812370563_6_6,939782495)", + "equals(D_812370563_6_6,135725957)", + "equals(D_812370563_6_6,518416174)", + "equals(D_812370563_6_6,847945207)", + "equals(D_812370563_6_6,283025574)", + "equals(D_812370563_6_6,942970912)", + "equals(D_812370563_6_6,596122041)", + "equals(D_812370563_6_6,489400183)", + "equals(D_812370563_6_6,863246236)", + "equals(D_812370563_6_6,607793249)", + "equals(D_812370563_6_6,532172400)", + "equals(D_812370563_6_6,754745617)", + "equals(D_812370563_6_6,665036297)", + "equals(D_812370563_6_6,200837530)", + "equals(D_812370563_6_6,990319383)", + "equals(D_812370563_6_6,487917585)", + "equals(D_812370563_6_6,603181162)", + "equals(D_812370563_6_6,482225200)", + "equals(D_812370563_6_6,295976386)", + "equals(D_812370563_6_6,764891959)", + "equals(D_812370563_6_6,248374037)", + "equals(D_812370563_6_6,139822395)", + "equals(D_812370563_6_6,723614811)", + "valueLength('D_933110091_6_6')>0", + "doesNotExist('D_933110091_6_6')", + "selectionCount(\"D_812370563_6_6\",true)>0 or valueLength(\"D_933110091_6_6\")>0", + "valueLength('D_714001034_6_6')>0", + "equals(D_887697329_6_6,178420302)", + "allExist('D_473529484_6_6','D_812370563_6_6')", + "equals(D_473529484_6_6,353358909)", + "equals(D_473529484_6_6,104430631)", + "equals(D_873968217_6_6,709650750)", + "equals(D_873968217_6_6,810290359)", + "equals(D_873968217_6_6,509607548)", + "equals(D_873968217_6_6,784922042)", + "equals(D_718867914_6_6,104430631)", + "equals(D_718867914_6_6,353358909)", + "equals(D_718867914_6_6,178420302)", + "equals(isNotDefined(D_714001034_7_7,false),false)", + "doesNotEqual(isNotDefined(D_714001034_7_7,false),false)", + "equals(D_887697329_7_7,654207589)", + "equals(D_887697329_7_7,536341288)", + "and(doesNotEqual(D_887697329_7_7,654207589),doesNotEqual(D_887697329_7_7,536341288))", + "equals(D_418392907_7_7,353358909)", + "doesNotEqual(D_418392907_7_7,353358909)", + "equals(D_812370563_7_7,939782495)", + "equals(D_812370563_7_7,135725957)", + "equals(D_812370563_7_7,518416174)", + "equals(D_812370563_7_7,847945207)", + "equals(D_812370563_7_7,283025574)", + "equals(D_812370563_7_7,942970912)", + "equals(D_812370563_7_7,596122041)", + "equals(D_812370563_7_7,489400183)", + "equals(D_812370563_7_7,863246236)", + "equals(D_812370563_7_7,607793249)", + "equals(D_812370563_7_7,532172400)", + "equals(D_812370563_7_7,754745617)", + "equals(D_812370563_7_7,665036297)", + "equals(D_812370563_7_7,200837530)", + "equals(D_812370563_7_7,990319383)", + "equals(D_812370563_7_7,487917585)", + "equals(D_812370563_7_7,603181162)", + "equals(D_812370563_7_7,482225200)", + "equals(D_812370563_7_7,295976386)", + "equals(D_812370563_7_7,764891959)", + "equals(D_812370563_7_7,248374037)", + "equals(D_812370563_7_7,139822395)", + "equals(D_812370563_7_7,723614811)", + "valueLength('D_933110091_7_7')>0", + "doesNotExist('D_933110091_7_7')", + "selectionCount(\"D_812370563_7_7\",true)>0 or valueLength(\"D_933110091_7_7\")>0", + "valueLength('D_714001034_7_7')>0", + "equals(D_887697329_7_7,178420302)", + "allExist('D_473529484_7_7','D_812370563_7_7')", + "equals(D_473529484_7_7,353358909)", + "equals(D_473529484_7_7,104430631)", + "equals(D_873968217_7_7,709650750)", + "equals(D_873968217_7_7,810290359)", + "equals(D_873968217_7_7,509607548)", + "equals(D_873968217_7_7,784922042)", + "equals(D_718867914_7_7,104430631)", + "equals(D_718867914_7_7,353358909)", + "equals(D_718867914_7_7,178420302)", + "equals(isNotDefined(D_714001034_8_8,false),false)", + "doesNotEqual(isNotDefined(D_714001034_8_8,false),false)", + "equals(D_887697329_8_8,654207589)", + "equals(D_887697329_8_8,536341288)", + "and(doesNotEqual(D_887697329_8_8,654207589),doesNotEqual(D_887697329_8_8,536341288))", + "equals(D_418392907_8_8,353358909)", + "doesNotEqual(D_418392907_8_8,353358909)", + "equals(D_812370563_8_8,939782495)", + "equals(D_812370563_8_8,135725957)", + "equals(D_812370563_8_8,518416174)", + "equals(D_812370563_8_8,847945207)", + "equals(D_812370563_8_8,283025574)", + "equals(D_812370563_8_8,942970912)", + "equals(D_812370563_8_8,596122041)", + "equals(D_812370563_8_8,489400183)", + "equals(D_812370563_8_8,863246236)", + "equals(D_812370563_8_8,607793249)", + "equals(D_812370563_8_8,532172400)", + "equals(D_812370563_8_8,754745617)", + "equals(D_812370563_8_8,665036297)", + "equals(D_812370563_8_8,200837530)", + "equals(D_812370563_8_8,990319383)", + "equals(D_812370563_8_8,487917585)", + "equals(D_812370563_8_8,603181162)", + "equals(D_812370563_8_8,482225200)", + "equals(D_812370563_8_8,295976386)", + "equals(D_812370563_8_8,764891959)", + "equals(D_812370563_8_8,248374037)", + "equals(D_812370563_8_8,139822395)", + "equals(D_812370563_8_8,723614811)", + "valueLength('D_933110091_8_8')>0", + "doesNotExist('D_933110091_8_8')", + "selectionCount(\"D_812370563_8_8\",true)>0 or valueLength(\"D_933110091_8_8\")>0", + "valueLength('D_714001034_8_8')>0", + "equals(D_887697329_8_8,178420302)", + "allExist('D_473529484_8_8','D_812370563_8_8')", + "equals(D_473529484_8_8,353358909)", + "equals(D_473529484_8_8,104430631)", + "equals(D_873968217_8_8,709650750)", + "equals(D_873968217_8_8,810290359)", + "equals(D_873968217_8_8,509607548)", + "equals(D_873968217_8_8,784922042)", + "equals(D_718867914_8_8,104430631)", + "equals(D_718867914_8_8,353358909)", + "equals(D_718867914_8_8,178420302)", + "equals(isNotDefined(D_714001034_9_9,false),false)", + "doesNotEqual(isNotDefined(D_714001034_9_9,false),false)", + "equals(D_887697329_9_9,654207589)", + "equals(D_887697329_9_9,536341288)", + "and(doesNotEqual(D_887697329_9_9,654207589),doesNotEqual(D_887697329_9_9,536341288))", + "equals(D_418392907_9_9,353358909)", + "doesNotEqual(D_418392907_9_9,353358909)", + "equals(D_812370563_9_9,939782495)", + "equals(D_812370563_9_9,135725957)", + "equals(D_812370563_9_9,518416174)", + "equals(D_812370563_9_9,847945207)", + "equals(D_812370563_9_9,283025574)", + "equals(D_812370563_9_9,942970912)", + "equals(D_812370563_9_9,596122041)", + "equals(D_812370563_9_9,489400183)", + "equals(D_812370563_9_9,863246236)", + "equals(D_812370563_9_9,607793249)", + "equals(D_812370563_9_9,532172400)", + "equals(D_812370563_9_9,754745617)", + "equals(D_812370563_9_9,665036297)", + "equals(D_812370563_9_9,200837530)", + "equals(D_812370563_9_9,990319383)", + "equals(D_812370563_9_9,487917585)", + "equals(D_812370563_9_9,603181162)", + "equals(D_812370563_9_9,482225200)", + "equals(D_812370563_9_9,295976386)", + "equals(D_812370563_9_9,764891959)", + "equals(D_812370563_9_9,248374037)", + "equals(D_812370563_9_9,139822395)", + "equals(D_812370563_9_9,723614811)", + "valueLength('D_933110091_9_9')>0", + "doesNotExist('D_933110091_9_9')", + "selectionCount(\"D_812370563_9_9\",true)>0 or valueLength(\"D_933110091_9_9\")>0", + "valueLength('D_714001034_9_9')>0", + "equals(D_887697329_9_9,178420302)", + "allExist('D_473529484_9_9','D_812370563_9_9')", + "equals(D_473529484_9_9,353358909)", + "equals(D_473529484_9_9,104430631)", + "equals(D_873968217_9_9,709650750)", + "equals(D_873968217_9_9,810290359)", + "equals(D_873968217_9_9,509607548)", + "equals(D_873968217_9_9,784922042)", + "equals(D_718867914_9_9,104430631)", + "equals(D_718867914_9_9,353358909)", + "equals(D_718867914_9_9,178420302)", + "equals(isNotDefined(D_714001034_10_10,false),false)", + "doesNotEqual(isNotDefined(D_714001034_10_10,false),false)", + "equals(D_887697329_10_10,654207589)", + "equals(D_887697329_10_10,536341288)", + "and(doesNotEqual(D_887697329_10_10,654207589),doesNotEqual(D_887697329_10_10,536341288))", + "equals(D_418392907_10_10,353358909)", + "doesNotEqual(D_418392907_10_10,353358909)", + "equals(D_812370563_10_10,939782495)", + "equals(D_812370563_10_10,135725957)", + "equals(D_812370563_10_10,518416174)", + "equals(D_812370563_10_10,847945207)", + "equals(D_812370563_10_10,283025574)", + "equals(D_812370563_10_10,942970912)", + "equals(D_812370563_10_10,596122041)", + "equals(D_812370563_10_10,489400183)", + "equals(D_812370563_10_10,863246236)", + "equals(D_812370563_10_10,607793249)", + "equals(D_812370563_10_10,532172400)", + "equals(D_812370563_10_10,754745617)", + "equals(D_812370563_10_10,665036297)", + "equals(D_812370563_10_10,200837530)", + "equals(D_812370563_10_10,990319383)", + "equals(D_812370563_10_10,487917585)", + "equals(D_812370563_10_10,603181162)", + "equals(D_812370563_10_10,482225200)", + "equals(D_812370563_10_10,295976386)", + "equals(D_812370563_10_10,764891959)", + "equals(D_812370563_10_10,248374037)", + "equals(D_812370563_10_10,139822395)", + "equals(D_812370563_10_10,723614811)", + "valueLength('D_933110091_10_10')>0", + "doesNotExist('D_933110091_10_10')", + "selectionCount(\"D_812370563_10_10\",true)>0 or valueLength(\"D_933110091_10_10\")>0", + "valueLength('D_714001034_10_10')>0", + "equals(D_887697329_10_10,178420302)", + "allExist('D_473529484_10_10','D_812370563_10_10')", + "equals(D_473529484_10_10,353358909)", + "equals(D_473529484_10_10,104430631)", + "equals(D_873968217_10_10,709650750)", + "equals(D_873968217_10_10,810290359)", + "equals(D_873968217_10_10,509607548)", + "equals(D_873968217_10_10,784922042)", + "equals(D_718867914_10_10,104430631)", + "equals(D_718867914_10_10,353358909)", + "equals(D_718867914_10_10,178420302)", + "equals(isNotDefined(D_714001034_11_11,false),false)", + "doesNotEqual(isNotDefined(D_714001034_11_11,false),false)", + "equals(D_887697329_11_11,654207589)", + "equals(D_887697329_11_11,536341288)", + "and(doesNotEqual(D_887697329_11_11,654207589),doesNotEqual(D_887697329_11_11,536341288))", + "equals(D_418392907_11_11,353358909)", + "doesNotEqual(D_418392907_11_11,353358909)", + "equals(D_812370563_11_11,939782495)", + "equals(D_812370563_11_11,135725957)", + "equals(D_812370563_11_11,518416174)", + "equals(D_812370563_11_11,847945207)", + "equals(D_812370563_11_11,283025574)", + "equals(D_812370563_11_11,942970912)", + "equals(D_812370563_11_11,596122041)", + "equals(D_812370563_11_11,489400183)", + "equals(D_812370563_11_11,863246236)", + "equals(D_812370563_11_11,607793249)", + "equals(D_812370563_11_11,532172400)", + "equals(D_812370563_11_11,754745617)", + "equals(D_812370563_11_11,665036297)", + "equals(D_812370563_11_11,200837530)", + "equals(D_812370563_11_11,990319383)", + "equals(D_812370563_11_11,487917585)", + "equals(D_812370563_11_11,603181162)", + "equals(D_812370563_11_11,482225200)", + "equals(D_812370563_11_11,295976386)", + "equals(D_812370563_11_11,764891959)", + "equals(D_812370563_11_11,248374037)", + "equals(D_812370563_11_11,139822395)", + "equals(D_812370563_11_11,723614811)", + "valueLength('D_933110091_11_11')>0", + "doesNotExist('D_933110091_11_11')", + "selectionCount(\"D_812370563_11_11\",true)>0 or valueLength(\"D_933110091_11_11\")>0", + "valueLength('D_714001034_11_11')>0", + "equals(D_887697329_11_11,178420302)", + "allExist('D_473529484_11_11','D_812370563_11_11')", + "equals(D_473529484_11_11,353358909)", + "equals(D_473529484_11_11,104430631)", + "equals(D_873968217_11_11,709650750)", + "equals(D_873968217_11_11,810290359)", + "equals(D_873968217_11_11,509607548)", + "equals(D_873968217_11_11,784922042)", + "equals(D_718867914_11_11,104430631)", + "equals(D_718867914_11_11,353358909)", + "equals(D_718867914_11_11,178420302)", + "equals(isNotDefined(D_714001034_12_12,false),false)", + "doesNotEqual(isNotDefined(D_714001034_12_12,false),false)", + "equals(D_887697329_12_12,654207589)", + "equals(D_887697329_12_12,536341288)", + "and(doesNotEqual(D_887697329_12_12,654207589),doesNotEqual(D_887697329_12_12,536341288))", + "equals(D_418392907_12_12,353358909)", + "doesNotEqual(D_418392907_12_12,353358909)", + "equals(D_812370563_12_12,939782495)", + "equals(D_812370563_12_12,135725957)", + "equals(D_812370563_12_12,518416174)", + "equals(D_812370563_12_12,847945207)", + "equals(D_812370563_12_12,283025574)", + "equals(D_812370563_12_12,942970912)", + "equals(D_812370563_12_12,596122041)", + "equals(D_812370563_12_12,489400183)", + "equals(D_812370563_12_12,863246236)", + "equals(D_812370563_12_12,607793249)", + "equals(D_812370563_12_12,532172400)", + "equals(D_812370563_12_12,754745617)", + "equals(D_812370563_12_12,665036297)", + "equals(D_812370563_12_12,200837530)", + "equals(D_812370563_12_12,990319383)", + "equals(D_812370563_12_12,487917585)", + "equals(D_812370563_12_12,603181162)", + "equals(D_812370563_12_12,482225200)", + "equals(D_812370563_12_12,295976386)", + "equals(D_812370563_12_12,764891959)", + "equals(D_812370563_12_12,248374037)", + "equals(D_812370563_12_12,139822395)", + "equals(D_812370563_12_12,723614811)", + "valueLength('D_933110091_12_12')>0", + "doesNotExist('D_933110091_12_12')", + "selectionCount(\"D_812370563_12_12\",true)>0 or valueLength(\"D_933110091_12_12\")>0", + "valueLength('D_714001034_12_12')>0", + "equals(D_887697329_12_12,178420302)", + "allExist('D_473529484_12_12','D_812370563_12_12')", + "equals(D_473529484_12_12,353358909)", + "equals(D_473529484_12_12,104430631)", + "equals(D_873968217_12_12,709650750)", + "equals(D_873968217_12_12,810290359)", + "equals(D_873968217_12_12,509607548)", + "equals(D_873968217_12_12,784922042)", + "equals(D_718867914_12_12,104430631)", + "equals(D_718867914_12_12,353358909)", + "equals(D_718867914_12_12,178420302)", + "equals(isNotDefined(D_714001034_13_13,false),false)", + "doesNotEqual(isNotDefined(D_714001034_13_13,false),false)", + "equals(D_887697329_13_13,654207589)", + "equals(D_887697329_13_13,536341288)", + "and(doesNotEqual(D_887697329_13_13,654207589),doesNotEqual(D_887697329_13_13,536341288))", + "equals(D_418392907_13_13,353358909)", + "doesNotEqual(D_418392907_13_13,353358909)", + "equals(D_812370563_13_13,939782495)", + "equals(D_812370563_13_13,135725957)", + "equals(D_812370563_13_13,518416174)", + "equals(D_812370563_13_13,847945207)", + "equals(D_812370563_13_13,283025574)", + "equals(D_812370563_13_13,942970912)", + "equals(D_812370563_13_13,596122041)", + "equals(D_812370563_13_13,489400183)", + "equals(D_812370563_13_13,863246236)", + "equals(D_812370563_13_13,607793249)", + "equals(D_812370563_13_13,532172400)", + "equals(D_812370563_13_13,754745617)", + "equals(D_812370563_13_13,665036297)", + "equals(D_812370563_13_13,200837530)", + "equals(D_812370563_13_13,990319383)", + "equals(D_812370563_13_13,487917585)", + "equals(D_812370563_13_13,603181162)", + "equals(D_812370563_13_13,482225200)", + "equals(D_812370563_13_13,295976386)", + "equals(D_812370563_13_13,764891959)", + "equals(D_812370563_13_13,248374037)", + "equals(D_812370563_13_13,139822395)", + "equals(D_812370563_13_13,723614811)", + "valueLength('D_933110091_13_13')>0", + "doesNotExist('D_933110091_13_13')", + "selectionCount(\"D_812370563_13_13\",true)>0 or valueLength(\"D_933110091_13_13\")>0", + "valueLength('D_714001034_13_13')>0", + "equals(D_887697329_13_13,178420302)", + "allExist('D_473529484_13_13','D_812370563_13_13')", + "equals(D_473529484_13_13,353358909)", + "equals(D_473529484_13_13,104430631)", + "equals(D_873968217_13_13,709650750)", + "equals(D_873968217_13_13,810290359)", + "equals(D_873968217_13_13,509607548)", + "equals(D_873968217_13_13,784922042)", + "equals(D_718867914_13_13,104430631)", + "equals(D_718867914_13_13,353358909)", + "equals(D_718867914_13_13,178420302)", + "equals(isNotDefined(D_714001034_14_14,false),false)", + "doesNotEqual(isNotDefined(D_714001034_14_14,false),false)", + "equals(D_887697329_14_14,654207589)", + "equals(D_887697329_14_14,536341288)", + "and(doesNotEqual(D_887697329_14_14,654207589),doesNotEqual(D_887697329_14_14,536341288))", + "equals(D_418392907_14_14,353358909)", + "doesNotEqual(D_418392907_14_14,353358909)", + "equals(D_812370563_14_14,939782495)", + "equals(D_812370563_14_14,135725957)", + "equals(D_812370563_14_14,518416174)", + "equals(D_812370563_14_14,847945207)", + "equals(D_812370563_14_14,283025574)", + "equals(D_812370563_14_14,942970912)", + "equals(D_812370563_14_14,596122041)", + "equals(D_812370563_14_14,489400183)", + "equals(D_812370563_14_14,863246236)", + "equals(D_812370563_14_14,607793249)", + "equals(D_812370563_14_14,532172400)", + "equals(D_812370563_14_14,754745617)", + "equals(D_812370563_14_14,665036297)", + "equals(D_812370563_14_14,200837530)", + "equals(D_812370563_14_14,990319383)", + "equals(D_812370563_14_14,487917585)", + "equals(D_812370563_14_14,603181162)", + "equals(D_812370563_14_14,482225200)", + "equals(D_812370563_14_14,295976386)", + "equals(D_812370563_14_14,764891959)", + "equals(D_812370563_14_14,248374037)", + "equals(D_812370563_14_14,139822395)", + "equals(D_812370563_14_14,723614811)", + "valueLength('D_933110091_14_14')>0", + "doesNotExist('D_933110091_14_14')", + "selectionCount(\"D_812370563_14_14\",true)>0 or valueLength(\"D_933110091_14_14\")>0", + "valueLength('D_714001034_14_14')>0", + "equals(D_887697329_14_14,178420302)", + "allExist('D_473529484_14_14','D_812370563_14_14')", + "equals(D_473529484_14_14,353358909)", + "equals(D_473529484_14_14,104430631)", + "equals(D_873968217_14_14,709650750)", + "equals(D_873968217_14_14,810290359)", + "equals(D_873968217_14_14,509607548)", + "equals(D_873968217_14_14,784922042)", + "equals(D_718867914_14_14,104430631)", + "equals(D_718867914_14_14,353358909)", + "equals(D_718867914_14_14,178420302)", + "equals(isNotDefined(D_714001034_15_15,false),false)", + "doesNotEqual(isNotDefined(D_714001034_15_15,false),false)", + "equals(D_887697329_15_15,654207589)", + "equals(D_887697329_15_15,536341288)", + "and(doesNotEqual(D_887697329_15_15,654207589),doesNotEqual(D_887697329_15_15,536341288))", + "equals(D_418392907_15_15,353358909)", + "doesNotEqual(D_418392907_15_15,353358909)", + "equals(D_812370563_15_15,939782495)", + "equals(D_812370563_15_15,135725957)", + "equals(D_812370563_15_15,518416174)", + "equals(D_812370563_15_15,847945207)", + "equals(D_812370563_15_15,283025574)", + "equals(D_812370563_15_15,942970912)", + "equals(D_812370563_15_15,596122041)", + "equals(D_812370563_15_15,489400183)", + "equals(D_812370563_15_15,863246236)", + "equals(D_812370563_15_15,607793249)", + "equals(D_812370563_15_15,532172400)", + "equals(D_812370563_15_15,754745617)", + "equals(D_812370563_15_15,665036297)", + "equals(D_812370563_15_15,200837530)", + "equals(D_812370563_15_15,990319383)", + "equals(D_812370563_15_15,487917585)", + "equals(D_812370563_15_15,603181162)", + "equals(D_812370563_15_15,482225200)", + "equals(D_812370563_15_15,295976386)", + "equals(D_812370563_15_15,764891959)", + "equals(D_812370563_15_15,248374037)", + "equals(D_812370563_15_15,139822395)", + "equals(D_812370563_15_15,723614811)", + "valueLength('D_933110091_15_15')>0", + "doesNotExist('D_933110091_15_15')", + "selectionCount(\"D_812370563_15_15\",true)>0 or valueLength(\"D_933110091_15_15\")>0", + "valueLength('D_714001034_15_15')>0", + "equals(D_887697329_15_15,178420302)", + "allExist('D_473529484_15_15','D_812370563_15_15')", + "equals(D_473529484_15_15,353358909)", + "equals(D_473529484_15_15,104430631)", + "equals(D_873968217_15_15,709650750)", + "equals(D_873968217_15_15,810290359)", + "equals(D_873968217_15_15,509607548)", + "equals(D_873968217_15_15,784922042)", + "equals(D_718867914_15_15,104430631)", + "equals(D_718867914_15_15,353358909)", + "equals(D_718867914_15_15,178420302)", + "equals(isNotDefined(D_714001034_16_16,false),false)", + "doesNotEqual(isNotDefined(D_714001034_16_16,false),false)", + "equals(D_887697329_16_16,654207589)", + "equals(D_887697329_16_16,536341288)", + "and(doesNotEqual(D_887697329_16_16,654207589),doesNotEqual(D_887697329_16_16,536341288))", + "equals(D_418392907_16_16,353358909)", + "doesNotEqual(D_418392907_16_16,353358909)", + "equals(D_812370563_16_16,939782495)", + "equals(D_812370563_16_16,135725957)", + "equals(D_812370563_16_16,518416174)", + "equals(D_812370563_16_16,847945207)", + "equals(D_812370563_16_16,283025574)", + "equals(D_812370563_16_16,942970912)", + "equals(D_812370563_16_16,596122041)", + "equals(D_812370563_16_16,489400183)", + "equals(D_812370563_16_16,863246236)", + "equals(D_812370563_16_16,607793249)", + "equals(D_812370563_16_16,532172400)", + "equals(D_812370563_16_16,754745617)", + "equals(D_812370563_16_16,665036297)", + "equals(D_812370563_16_16,200837530)", + "equals(D_812370563_16_16,990319383)", + "equals(D_812370563_16_16,487917585)", + "equals(D_812370563_16_16,603181162)", + "equals(D_812370563_16_16,482225200)", + "equals(D_812370563_16_16,295976386)", + "equals(D_812370563_16_16,764891959)", + "equals(D_812370563_16_16,248374037)", + "equals(D_812370563_16_16,139822395)", + "equals(D_812370563_16_16,723614811)", + "valueLength('D_933110091_16_16')>0", + "doesNotExist('D_933110091_16_16')", + "selectionCount(\"D_812370563_16_16\",true)>0 or valueLength(\"D_933110091_16_16\")>0", + "valueLength('D_714001034_16_16')>0", + "equals(D_887697329_16_16,178420302)", + "allExist('D_473529484_16_16','D_812370563_16_16')", + "equals(D_473529484_16_16,353358909)", + "equals(D_473529484_16_16,104430631)", + "equals(D_873968217_16_16,709650750)", + "equals(D_873968217_16_16,810290359)", + "equals(D_873968217_16_16,509607548)", + "equals(D_873968217_16_16,784922042)", + "equals(D_718867914_16_16,104430631)", + "equals(D_718867914_16_16,353358909)", + "equals(D_718867914_16_16,178420302)", + "equals(isNotDefined(D_714001034_17_17,false),false)", + "doesNotEqual(isNotDefined(D_714001034_17_17,false),false)", + "equals(D_887697329_17_17,654207589)", + "equals(D_887697329_17_17,536341288)", + "and(doesNotEqual(D_887697329_17_17,654207589),doesNotEqual(D_887697329_17_17,536341288))", + "equals(D_418392907_17_17,353358909)", + "doesNotEqual(D_418392907_17_17,353358909)", + "equals(D_812370563_17_17,939782495)", + "equals(D_812370563_17_17,135725957)", + "equals(D_812370563_17_17,518416174)", + "equals(D_812370563_17_17,847945207)", + "equals(D_812370563_17_17,283025574)", + "equals(D_812370563_17_17,942970912)", + "equals(D_812370563_17_17,596122041)", + "equals(D_812370563_17_17,489400183)", + "equals(D_812370563_17_17,863246236)", + "equals(D_812370563_17_17,607793249)", + "equals(D_812370563_17_17,532172400)", + "equals(D_812370563_17_17,754745617)", + "equals(D_812370563_17_17,665036297)", + "equals(D_812370563_17_17,200837530)", + "equals(D_812370563_17_17,990319383)", + "equals(D_812370563_17_17,487917585)", + "equals(D_812370563_17_17,603181162)", + "equals(D_812370563_17_17,482225200)", + "equals(D_812370563_17_17,295976386)", + "equals(D_812370563_17_17,764891959)", + "equals(D_812370563_17_17,248374037)", + "equals(D_812370563_17_17,139822395)", + "equals(D_812370563_17_17,723614811)", + "valueLength('D_933110091_17_17')>0", + "doesNotExist('D_933110091_17_17')", + "selectionCount(\"D_812370563_17_17\",true)>0 or valueLength(\"D_933110091_17_17\")>0", + "valueLength('D_714001034_17_17')>0", + "equals(D_887697329_17_17,178420302)", + "allExist('D_473529484_17_17','D_812370563_17_17')", + "equals(D_473529484_17_17,353358909)", + "equals(D_473529484_17_17,104430631)", + "equals(D_873968217_17_17,709650750)", + "equals(D_873968217_17_17,810290359)", + "equals(D_873968217_17_17,509607548)", + "equals(D_873968217_17_17,784922042)", + "equals(D_718867914_17_17,104430631)", + "equals(D_718867914_17_17,353358909)", + "equals(D_718867914_17_17,178420302)", + "equals(isNotDefined(D_714001034_18_18,false),false)", + "doesNotEqual(isNotDefined(D_714001034_18_18,false),false)", + "equals(D_887697329_18_18,654207589)", + "equals(D_887697329_18_18,536341288)", + "and(doesNotEqual(D_887697329_18_18,654207589),doesNotEqual(D_887697329_18_18,536341288))", + "equals(D_418392907_18_18,353358909)", + "doesNotEqual(D_418392907_18_18,353358909)", + "equals(D_812370563_18_18,939782495)", + "equals(D_812370563_18_18,135725957)", + "equals(D_812370563_18_18,518416174)", + "equals(D_812370563_18_18,847945207)", + "equals(D_812370563_18_18,283025574)", + "equals(D_812370563_18_18,942970912)", + "equals(D_812370563_18_18,596122041)", + "equals(D_812370563_18_18,489400183)", + "equals(D_812370563_18_18,863246236)", + "equals(D_812370563_18_18,607793249)", + "equals(D_812370563_18_18,532172400)", + "equals(D_812370563_18_18,754745617)", + "equals(D_812370563_18_18,665036297)", + "equals(D_812370563_18_18,200837530)", + "equals(D_812370563_18_18,990319383)", + "equals(D_812370563_18_18,487917585)", + "equals(D_812370563_18_18,603181162)", + "equals(D_812370563_18_18,482225200)", + "equals(D_812370563_18_18,295976386)", + "equals(D_812370563_18_18,764891959)", + "equals(D_812370563_18_18,248374037)", + "equals(D_812370563_18_18,139822395)", + "equals(D_812370563_18_18,723614811)", + "valueLength('D_933110091_18_18')>0", + "doesNotExist('D_933110091_18_18')", + "selectionCount(\"D_812370563_18_18\",true)>0 or valueLength(\"D_933110091_18_18\")>0", + "valueLength('D_714001034_18_18')>0", + "equals(D_887697329_18_18,178420302)", + "allExist('D_473529484_18_18','D_812370563_18_18')", + "equals(D_473529484_18_18,353358909)", + "equals(D_473529484_18_18,104430631)", + "equals(D_873968217_18_18,709650750)", + "equals(D_873968217_18_18,810290359)", + "equals(D_873968217_18_18,509607548)", + "equals(D_873968217_18_18,784922042)", + "equals(D_718867914_18_18,104430631)", + "equals(D_718867914_18_18,353358909)", + "equals(D_718867914_18_18,178420302)", + "equals(isNotDefined(D_714001034_19_19,false),false)", + "doesNotEqual(isNotDefined(D_714001034_19_19,false),false)", + "equals(D_887697329_19_19,654207589)", + "equals(D_887697329_19_19,536341288)", + "and(doesNotEqual(D_887697329_19_19,654207589),doesNotEqual(D_887697329_19_19,536341288))", + "equals(D_418392907_19_19,353358909)", + "doesNotEqual(D_418392907_19_19,353358909)", + "equals(D_812370563_19_19,939782495)", + "equals(D_812370563_19_19,135725957)", + "equals(D_812370563_19_19,518416174)", + "equals(D_812370563_19_19,847945207)", + "equals(D_812370563_19_19,283025574)", + "equals(D_812370563_19_19,942970912)", + "equals(D_812370563_19_19,596122041)", + "equals(D_812370563_19_19,489400183)", + "equals(D_812370563_19_19,863246236)", + "equals(D_812370563_19_19,607793249)", + "equals(D_812370563_19_19,532172400)", + "equals(D_812370563_19_19,754745617)", + "equals(D_812370563_19_19,665036297)", + "equals(D_812370563_19_19,200837530)", + "equals(D_812370563_19_19,990319383)", + "equals(D_812370563_19_19,487917585)", + "equals(D_812370563_19_19,603181162)", + "equals(D_812370563_19_19,482225200)", + "equals(D_812370563_19_19,295976386)", + "equals(D_812370563_19_19,764891959)", + "equals(D_812370563_19_19,248374037)", + "equals(D_812370563_19_19,139822395)", + "equals(D_812370563_19_19,723614811)", + "valueLength('D_933110091_19_19')>0", + "doesNotExist('D_933110091_19_19')", + "selectionCount(\"D_812370563_19_19\",true)>0 or valueLength(\"D_933110091_19_19\")>0", + "valueLength('D_714001034_19_19')>0", + "equals(D_887697329_19_19,178420302)", + "allExist('D_473529484_19_19','D_812370563_19_19')", + "equals(D_473529484_19_19,353358909)", + "equals(D_473529484_19_19,104430631)", + "equals(D_873968217_19_19,709650750)", + "equals(D_873968217_19_19,810290359)", + "equals(D_873968217_19_19,509607548)", + "equals(D_873968217_19_19,784922042)", + "equals(D_718867914_19_19,104430631)", + "equals(D_718867914_19_19,353358909)", + "equals(D_718867914_19_19,178420302)", + "equals(isNotDefined(D_714001034_20_20,false),false)", + "doesNotEqual(isNotDefined(D_714001034_20_20,false),false)", + "equals(D_887697329_20_20,654207589)", + "equals(D_887697329_20_20,536341288)", + "and(doesNotEqual(D_887697329_20_20,654207589),doesNotEqual(D_887697329_20_20,536341288))", + "equals(D_418392907_20_20,353358909)", + "doesNotEqual(D_418392907_20_20,353358909)", + "equals(D_812370563_20_20,939782495)", + "equals(D_812370563_20_20,135725957)", + "equals(D_812370563_20_20,518416174)", + "equals(D_812370563_20_20,847945207)", + "equals(D_812370563_20_20,283025574)", + "equals(D_812370563_20_20,942970912)", + "equals(D_812370563_20_20,596122041)", + "equals(D_812370563_20_20,489400183)", + "equals(D_812370563_20_20,863246236)", + "equals(D_812370563_20_20,607793249)", + "equals(D_812370563_20_20,532172400)", + "equals(D_812370563_20_20,754745617)", + "equals(D_812370563_20_20,665036297)", + "equals(D_812370563_20_20,200837530)", + "equals(D_812370563_20_20,990319383)", + "equals(D_812370563_20_20,487917585)", + "equals(D_812370563_20_20,603181162)", + "equals(D_812370563_20_20,482225200)", + "equals(D_812370563_20_20,295976386)", + "equals(D_812370563_20_20,764891959)", + "equals(D_812370563_20_20,248374037)", + "equals(D_812370563_20_20,139822395)", + "equals(D_812370563_20_20,723614811)", + "valueLength('D_933110091_20_20')>0", + "doesNotExist('D_933110091_20_20')", + "selectionCount(\"D_812370563_20_20\",true)>0 or valueLength(\"D_933110091_20_20\")>0", + "valueLength('D_714001034_20_20')>0", + "equals(D_887697329_20_20,178420302)", + "allExist('D_473529484_20_20','D_812370563_20_20')", + "equals(D_473529484_20_20,353358909)", + "equals(D_473529484_20_20,104430631)", + "equals(D_873968217_20_20,709650750)", + "equals(D_873968217_20_20,810290359)", + "equals(D_873968217_20_20,509607548)", + "equals(D_873968217_20_20,784922042)", + "equals(D_718867914_20_20,104430631)", + "equals(D_718867914_20_20,353358909)", + "equals(D_718867914_20_20,178420302)", + "equals(isNotDefined(D_714001034_21_21,false),false)", + "doesNotEqual(isNotDefined(D_714001034_21_21,false),false)", + "equals(D_887697329_21_21,654207589)", + "equals(D_887697329_21_21,536341288)", + "and(doesNotEqual(D_887697329_21_21,654207589),doesNotEqual(D_887697329_21_21,536341288))", + "equals(D_418392907_21_21,353358909)", + "doesNotEqual(D_418392907_21_21,353358909)", + "equals(D_812370563_21_21,939782495)", + "equals(D_812370563_21_21,135725957)", + "equals(D_812370563_21_21,518416174)", + "equals(D_812370563_21_21,847945207)", + "equals(D_812370563_21_21,283025574)", + "equals(D_812370563_21_21,942970912)", + "equals(D_812370563_21_21,596122041)", + "equals(D_812370563_21_21,489400183)", + "equals(D_812370563_21_21,863246236)", + "equals(D_812370563_21_21,607793249)", + "equals(D_812370563_21_21,532172400)", + "equals(D_812370563_21_21,754745617)", + "equals(D_812370563_21_21,665036297)", + "equals(D_812370563_21_21,200837530)", + "equals(D_812370563_21_21,990319383)", + "equals(D_812370563_21_21,487917585)", + "equals(D_812370563_21_21,603181162)", + "equals(D_812370563_21_21,482225200)", + "equals(D_812370563_21_21,295976386)", + "equals(D_812370563_21_21,764891959)", + "equals(D_812370563_21_21,248374037)", + "equals(D_812370563_21_21,139822395)", + "equals(D_812370563_21_21,723614811)", + "valueLength('D_933110091_21_21')>0", + "doesNotExist('D_933110091_21_21')", + "selectionCount(\"D_812370563_21_21\",true)>0 or valueLength(\"D_933110091_21_21\")>0", + "valueLength('D_714001034_21_21')>0", + "equals(D_887697329_21_21,178420302)", + "allExist('D_473529484_21_21','D_812370563_21_21')", + "equals(D_473529484_21_21,353358909)", + "equals(D_473529484_21_21,104430631)", + "equals(D_873968217_21_21,709650750)", + "equals(D_873968217_21_21,810290359)", + "equals(D_873968217_21_21,509607548)", + "equals(D_873968217_21_21,784922042)", + "equals(D_718867914_21_21,104430631)", + "equals(D_718867914_21_21,353358909)", + "equals(D_718867914_21_21,178420302)", + "equals(isNotDefined(D_714001034_22_22,false),false)", + "doesNotEqual(isNotDefined(D_714001034_22_22,false),false)", + "equals(D_887697329_22_22,654207589)", + "equals(D_887697329_22_22,536341288)", + "and(doesNotEqual(D_887697329_22_22,654207589),doesNotEqual(D_887697329_22_22,536341288))", + "equals(D_418392907_22_22,353358909)", + "doesNotEqual(D_418392907_22_22,353358909)", + "equals(D_812370563_22_22,939782495)", + "equals(D_812370563_22_22,135725957)", + "equals(D_812370563_22_22,518416174)", + "equals(D_812370563_22_22,847945207)", + "equals(D_812370563_22_22,283025574)", + "equals(D_812370563_22_22,942970912)", + "equals(D_812370563_22_22,596122041)", + "equals(D_812370563_22_22,489400183)", + "equals(D_812370563_22_22,863246236)", + "equals(D_812370563_22_22,607793249)", + "equals(D_812370563_22_22,532172400)", + "equals(D_812370563_22_22,754745617)", + "equals(D_812370563_22_22,665036297)", + "equals(D_812370563_22_22,200837530)", + "equals(D_812370563_22_22,990319383)", + "equals(D_812370563_22_22,487917585)", + "equals(D_812370563_22_22,603181162)", + "equals(D_812370563_22_22,482225200)", + "equals(D_812370563_22_22,295976386)", + "equals(D_812370563_22_22,764891959)", + "equals(D_812370563_22_22,248374037)", + "equals(D_812370563_22_22,139822395)", + "equals(D_812370563_22_22,723614811)", + "valueLength('D_933110091_22_22')>0", + "doesNotExist('D_933110091_22_22')", + "selectionCount(\"D_812370563_22_22\",true)>0 or valueLength(\"D_933110091_22_22\")>0", + "valueLength('D_714001034_22_22')>0", + "equals(D_887697329_22_22,178420302)", + "allExist('D_473529484_22_22','D_812370563_22_22')", + "equals(D_473529484_22_22,353358909)", + "equals(D_473529484_22_22,104430631)", + "equals(D_873968217_22_22,709650750)", + "equals(D_873968217_22_22,810290359)", + "equals(D_873968217_22_22,509607548)", + "equals(D_873968217_22_22,784922042)", + "equals(D_718867914_22_22,104430631)", + "equals(D_718867914_22_22,353358909)", + "equals(D_718867914_22_22,178420302)", + "equals(isNotDefined(D_714001034_23_23,false),false)", + "doesNotEqual(isNotDefined(D_714001034_23_23,false),false)", + "equals(D_887697329_23_23,654207589)", + "equals(D_887697329_23_23,536341288)", + "and(doesNotEqual(D_887697329_23_23,654207589),doesNotEqual(D_887697329_23_23,536341288))", + "equals(D_418392907_23_23,353358909)", + "doesNotEqual(D_418392907_23_23,353358909)", + "equals(D_812370563_23_23,939782495)", + "equals(D_812370563_23_23,135725957)", + "equals(D_812370563_23_23,518416174)", + "equals(D_812370563_23_23,847945207)", + "equals(D_812370563_23_23,283025574)", + "equals(D_812370563_23_23,942970912)", + "equals(D_812370563_23_23,596122041)", + "equals(D_812370563_23_23,489400183)", + "equals(D_812370563_23_23,863246236)", + "equals(D_812370563_23_23,607793249)", + "equals(D_812370563_23_23,532172400)", + "equals(D_812370563_23_23,754745617)", + "equals(D_812370563_23_23,665036297)", + "equals(D_812370563_23_23,200837530)", + "equals(D_812370563_23_23,990319383)", + "equals(D_812370563_23_23,487917585)", + "equals(D_812370563_23_23,603181162)", + "equals(D_812370563_23_23,482225200)", + "equals(D_812370563_23_23,295976386)", + "equals(D_812370563_23_23,764891959)", + "equals(D_812370563_23_23,248374037)", + "equals(D_812370563_23_23,139822395)", + "equals(D_812370563_23_23,723614811)", + "valueLength('D_933110091_23_23')>0", + "doesNotExist('D_933110091_23_23')", + "selectionCount(\"D_812370563_23_23\",true)>0 or valueLength(\"D_933110091_23_23\")>0", + "valueLength('D_714001034_23_23')>0", + "equals(D_887697329_23_23,178420302)", + "allExist('D_473529484_23_23','D_812370563_23_23')", + "equals(D_473529484_23_23,353358909)", + "equals(D_473529484_23_23,104430631)", + "equals(D_873968217_23_23,709650750)", + "equals(D_873968217_23_23,810290359)", + "equals(D_873968217_23_23,509607548)", + "equals(D_873968217_23_23,784922042)", + "equals(D_718867914_23_23,104430631)", + "equals(D_718867914_23_23,353358909)", + "equals(D_718867914_23_23,178420302)", + "equals(isNotDefined(D_714001034_24_24,false),false)", + "doesNotEqual(isNotDefined(D_714001034_24_24,false),false)", + "equals(D_887697329_24_24,654207589)", + "equals(D_887697329_24_24,536341288)", + "and(doesNotEqual(D_887697329_24_24,654207589),doesNotEqual(D_887697329_24_24,536341288))", + "equals(D_418392907_24_24,353358909)", + "doesNotEqual(D_418392907_24_24,353358909)", + "equals(D_812370563_24_24,939782495)", + "equals(D_812370563_24_24,135725957)", + "equals(D_812370563_24_24,518416174)", + "equals(D_812370563_24_24,847945207)", + "equals(D_812370563_24_24,283025574)", + "equals(D_812370563_24_24,942970912)", + "equals(D_812370563_24_24,596122041)", + "equals(D_812370563_24_24,489400183)", + "equals(D_812370563_24_24,863246236)", + "equals(D_812370563_24_24,607793249)", + "equals(D_812370563_24_24,532172400)", + "equals(D_812370563_24_24,754745617)", + "equals(D_812370563_24_24,665036297)", + "equals(D_812370563_24_24,200837530)", + "equals(D_812370563_24_24,990319383)", + "equals(D_812370563_24_24,487917585)", + "equals(D_812370563_24_24,603181162)", + "equals(D_812370563_24_24,482225200)", + "equals(D_812370563_24_24,295976386)", + "equals(D_812370563_24_24,764891959)", + "equals(D_812370563_24_24,248374037)", + "equals(D_812370563_24_24,139822395)", + "equals(D_812370563_24_24,723614811)", + "valueLength('D_933110091_24_24')>0", + "doesNotExist('D_933110091_24_24')", + "selectionCount(\"D_812370563_24_24\",true)>0 or valueLength(\"D_933110091_24_24\")>0", + "valueLength('D_714001034_24_24')>0", + "equals(D_887697329_24_24,178420302)", + "allExist('D_473529484_24_24','D_812370563_24_24')", + "equals(D_473529484_24_24,353358909)", + "equals(D_473529484_24_24,104430631)", + "equals(D_873968217_24_24,709650750)", + "equals(D_873968217_24_24,810290359)", + "equals(D_873968217_24_24,509607548)", + "equals(D_873968217_24_24,784922042)", + "equals(D_718867914_24_24,104430631)", + "equals(D_718867914_24_24,353358909)", + "equals(D_718867914_24_24,178420302)", + "equals(isNotDefined(D_714001034_25_25,false),false)", + "doesNotEqual(isNotDefined(D_714001034_25_25,false),false)", + "equals(D_887697329_25_25,654207589)", + "equals(D_887697329_25_25,536341288)", + "and(doesNotEqual(D_887697329_25_25,654207589),doesNotEqual(D_887697329_25_25,536341288))", + "equals(D_418392907_25_25,353358909)", + "doesNotEqual(D_418392907_25_25,353358909)", + "equals(D_812370563_25_25,939782495)", + "equals(D_812370563_25_25,135725957)", + "equals(D_812370563_25_25,518416174)", + "equals(D_812370563_25_25,847945207)", + "equals(D_812370563_25_25,283025574)", + "equals(D_812370563_25_25,942970912)", + "equals(D_812370563_25_25,596122041)", + "equals(D_812370563_25_25,489400183)", + "equals(D_812370563_25_25,863246236)", + "equals(D_812370563_25_25,607793249)", + "equals(D_812370563_25_25,532172400)", + "equals(D_812370563_25_25,754745617)", + "equals(D_812370563_25_25,665036297)", + "equals(D_812370563_25_25,200837530)", + "equals(D_812370563_25_25,990319383)", + "equals(D_812370563_25_25,487917585)", + "equals(D_812370563_25_25,603181162)", + "equals(D_812370563_25_25,482225200)", + "equals(D_812370563_25_25,295976386)", + "equals(D_812370563_25_25,764891959)", + "equals(D_812370563_25_25,248374037)", + "equals(D_812370563_25_25,139822395)", + "equals(D_812370563_25_25,723614811)", + "valueLength('D_933110091_25_25')>0", + "doesNotExist('D_933110091_25_25')", + "selectionCount(\"D_812370563_25_25\",true)>0 or valueLength(\"D_933110091_25_25\")>0", + "valueLength('D_714001034_25_25')>0", + "equals(D_887697329_25_25,178420302)", + "allExist('D_473529484_25_25','D_812370563_25_25')", + "equals(D_473529484_25_25,353358909)", + "equals(D_473529484_25_25,104430631)", + "equals(D_873968217_25_25,709650750)", + "equals(D_873968217_25_25,810290359)", + "equals(D_873968217_25_25,509607548)", + "equals(D_873968217_25_25,784922042)", + "equals(D_718867914_25_25,104430631)", + "equals(D_718867914_25_25,353358909)", + "equals(D_718867914_25_25,178420302)" + ], + "sitesByScope": { + "element": 5, + "inline": 4486, + "question": 1400, + "response": 12 + }, + "sitesByAttribute": { + "displayif": 5903 + } + }, + "grids": [], + "loops": [ + { + "loopIndex": "1", + "loopMaxQuestionIds": [ + "D_694265648" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 218, + 253, + 288, + 323, + 358, + 393, + 428, + 463, + 498, + 533, + 568, + 603, + 638, + 673, + 708, + 743, + 778, + 813, + 848, + 883, + 918, + 953, + 988, + 1023, + 1058 + ], + "boundaryIndex": 1093 + }, + { + "loopIndex": "2", + "loopMaxQuestionIds": [ + "D_446999144" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 1097, + 1132, + 1167, + 1202, + 1237, + 1272, + 1307, + 1342, + 1377, + 1412, + 1447, + 1482, + 1517, + 1552, + 1587, + 1622, + 1657, + 1692, + 1727, + 1762, + 1797, + 1832, + 1867, + 1902, + 1937 + ], + "boundaryIndex": 1972 + } + ], + "unresolvedTargets": [], + "asyncQuestionIds": [ + "D_279637054", + "D_761310265" + ], + "counts": { + "authoredMarkerCount": 316, + "processorQuestionCount": 1998, + "processedQuestionCount": 1998, + "renderedFormCount": 1998, + "controlCount": 11726, + "responseControlCount": 5610, + "explicitTransitionCount": 1885, + "sequentialAdjacencyCount": 1997, + "resolvedExplicitTransitionCount": 1885, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 5903, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 50, + "loopDefinitionCount": 2, + "loopExpandedQuestionCount": 1750, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 2505 + } + }, + { + "schemaVersion": 1, + "module": "module1", + "locale": "es", + "language": "es", + "path": "prod/module1Spanish.txt", + "sha256": "f7a768ede6036e68742ea7d0bea3f0debc3f30aa4ab51774b637a9fbbe9e1d2e", + "questName": "D_726699695_V2", + "version": "4.0", + "authoredMarkerCount": 315, + "runtimeQuestionIds": [ + "INTROM1", + "INTROBAC", + "SECTION1", + "D_783167257?", + "RACEETHINTRO", + "D_384191091?", + "D_362270886?", + "D_525535977?", + "D_976808005?", + "D_308014437?", + "D_351657815?", + "D_115616118?", + "D_797626610?", + "D_588212264?", + "D_407056417?", + "D_750420077!", + "INTROMH", + "D_537153788?", + "D_508846529?", + "D_904550680?", + "D_167101091?", + "D_965917116?", + "D_929240175?", + "D_836712013?", + "D_836890480?", + "D_624479779?", + "D_337278854?", + "D_681229479?", + "D_660358706?", + "D_884793537?", + "D_460062034?", + "D_110652436?", + "D_894259747?", + "D_448722126?", + "D_201449164?", + "D_436333358?", + "D_180961306?", + "D_554782332?", + "D_409622468?", + "D_448476881?", + "D_459764934?", + "D_374697037?", + "D_580911251?", + "D_190347832?", + "D_624777141?", + "D_980403315?", + "D_936039586?", + "D_430472084?", + "D_900541533?", + "D_139655599?", + "D_494032093?", + "D_301679110?", + "D_810918716?", + "D_874046190?", + "D_989016875?", + "D_878094302?", + "D_543728565?", + "D_173101988?", + "D_245861186?", + "D_420423416?", + "INTROSTD", + "D_874709643?", + "D_915230886?", + "D_530548878?", + "D_469947273?", + "D_685735916?", + "D_954405492?", + "D_103397024?", + "D_931470797?", + "D_922524563?", + "D_978485677?", + "D_523188839?", + "D_725626004?", + "D_846786840?", + "D_423547108?", + "D_266847650?", + "D_852898339?", + "D_467061940?", + "D_619481697?", + "D_134642404?", + "D_219956652?", + "D_852236900?", + "DEPRESSINTRO", + "D_347860896?", + "D_301414575?", + "INTROSURG", + "D_624179836?", + "D_367884741?", + "D_178353079?", + "D_550075233?", + "D_927516732?", + "D_552788665?", + "D_439736294?", + "D_216506024?", + "D_860920332?", + "D_986613440?", + "D_517307064?", + "D_477690298?", + "D_176453768?", + "D_145786416?", + "D_287605131?", + "D_701157499?", + "D_428639167?", + "D_282355641?", + "D_539301647?", + "D_579225381?", + "D_891214661?", + "D_150352141?", + "D_122887481?", + "D_378892977?", + "D_534007917?", + "D_224791140?", + "D_752636038?", + "D_518750011?", + "D_946504570?", + "D_275770221?", + "D_107060069?", + "D_882152987?", + "D_527057404?", + "D_453252072?", + "D_795940097?", + "D_406011084?", + "D_593017220?", + "D_875208305?", + "D_323512813?", + "D_338924834?", + "D_952682839?", + "D_746012894?", + "D_114314839?", + "D_677262300?", + "D_650399623?", + "D_820324171?", + "D_724181652?", + "D_912857732?", + "D_808806810?", + "D_207025341?", + "D_803129396?", + "D_827393644?", + "D_183572295?", + "D_630675760?", + "D_837402132?", + "D_431628922?", + "D_848580651?", + "D_207494582?", + "D_936904328?", + "D_365851428?", + "D_206319592?", + "D_769668224?", + "D_814664694?", + "D_109544008?", + "D_186831207?", + "D_283634623?", + "D_164752169?", + "D_512167179?", + "D_509933065?", + "D_967093163?", + "FAMHISTINTRO", + "D_535621923?", + "D_992987417?", + "MOM", + "D_170440011?", + "D_354326265?", + "D_422714611?", + "D_276353712?", + "D_814510313?", + "D_259397450?", + "D_528753070?", + "D_683981980?", + "D_402548942?", + "D_247198016?", + "D_891925519?", + "D_317093647?", + "D_684692228?", + "D_671347092?", + "D_875221479?", + "D_186170949?", + "D_726451917?", + "D_213545903?", + "D_765903702?", + "D_773974223?", + "D_433604862?", + "D_521369040?", + "D_497311092?", + "D_625249910?", + "D_838564850?", + "D_633764113?", + "D_882263738?", + "D_671308090?", + "D_367374606?", + "D_178774803?", + "D_628078826?", + "D_659784914?", + "D_173240848?", + "D_345146692?", + "D_243443318?", + "D_610382315?", + "D_135519371?", + "D_785019074?", + "D_152885579?", + "D_692910565?", + "D_522464057?", + "D_808655074?", + "D_659627058?", + "D_370198527?", + "D_291855684?", + "D_413536735?", + "D_210325948?", + "D_193297280?", + "D_121502359?", + "D_489402657?", + "D_727260639?", + "D_359291056?", + "D_968841976?", + "D_864981804?", + "D_499434567?", + "SIB", + "D_694265648!", + "SIBCONFIRM", + "D_406098499_1_1?", + "D_579563781_1_1?", + "D_807431780_1_1?", + "D_589588769_1_1?", + "D_890637099_1_1?", + "D_869387390_1_1?", + "D_537137982_1_1?", + "D_607773106_1_1?", + "D_578895128_1_1?", + "D_384881609_1_1?", + "D_483975329_1_1?", + "D_570279754_1_1?", + "D_907590067_1_1?", + "D_860112841_1_1?", + "D_158354252_1_1?", + "D_654594205_1_1?", + "D_550722030_1_1?", + "D_142912472_1_1?", + "D_158409298_1_1?", + "D_529744595_1_1?", + "D_315987564_1_1?", + "D_852278004_1_1?", + "D_391972881_1_1?", + "D_259089008_1_1?", + "D_209771602_1_1?", + "D_682651189_1_1?", + "D_750994269_1_1?", + "D_700889863_1_1?", + "D_990114799_1_1?", + "D_195363361_1_1?", + "D_216840563_1_1?", + "D_514034680_1_1?", + "D_247160067_1_1?", + "D_312545873_1_1?", + "SIBSUM_1_1", + "D_406098499_2_2?", + "D_579563781_2_2?", + "D_807431780_2_2?", + "D_589588769_2_2?", + "D_890637099_2_2?", + "D_869387390_2_2?", + "D_537137982_2_2?", + "D_607773106_2_2?", + "D_578895128_2_2?", + "D_384881609_2_2?", + "D_483975329_2_2?", + "D_570279754_2_2?", + "D_907590067_2_2?", + "D_860112841_2_2?", + "D_158354252_2_2?", + "D_654594205_2_2?", + "D_550722030_2_2?", + "D_142912472_2_2?", + "D_158409298_2_2?", + "D_529744595_2_2?", + "D_315987564_2_2?", + "D_852278004_2_2?", + "D_391972881_2_2?", + "D_259089008_2_2?", + "D_209771602_2_2?", + "D_682651189_2_2?", + "D_750994269_2_2?", + "D_700889863_2_2?", + "D_990114799_2_2?", + "D_195363361_2_2?", + "D_216840563_2_2?", + "D_514034680_2_2?", + "D_247160067_2_2?", + "D_312545873_2_2?", + "SIBSUM_2_2", + "D_406098499_3_3?", + "D_579563781_3_3?", + "D_807431780_3_3?", + "D_589588769_3_3?", + "D_890637099_3_3?", + "D_869387390_3_3?", + "D_537137982_3_3?", + "D_607773106_3_3?", + "D_578895128_3_3?", + "D_384881609_3_3?", + "D_483975329_3_3?", + "D_570279754_3_3?", + "D_907590067_3_3?", + "D_860112841_3_3?", + "D_158354252_3_3?", + "D_654594205_3_3?", + "D_550722030_3_3?", + "D_142912472_3_3?", + "D_158409298_3_3?", + "D_529744595_3_3?", + "D_315987564_3_3?", + "D_852278004_3_3?", + "D_391972881_3_3?", + "D_259089008_3_3?", + "D_209771602_3_3?", + "D_682651189_3_3?", + "D_750994269_3_3?", + "D_700889863_3_3?", + "D_990114799_3_3?", + "D_195363361_3_3?", + "D_216840563_3_3?", + "D_514034680_3_3?", + "D_247160067_3_3?", + "D_312545873_3_3?", + "SIBSUM_3_3", + "D_406098499_4_4?", + "D_579563781_4_4?", + "D_807431780_4_4?", + "D_589588769_4_4?", + "D_890637099_4_4?", + "D_869387390_4_4?", + "D_537137982_4_4?", + "D_607773106_4_4?", + "D_578895128_4_4?", + "D_384881609_4_4?", + "D_483975329_4_4?", + "D_570279754_4_4?", + "D_907590067_4_4?", + "D_860112841_4_4?", + "D_158354252_4_4?", + "D_654594205_4_4?", + "D_550722030_4_4?", + "D_142912472_4_4?", + "D_158409298_4_4?", + "D_529744595_4_4?", + "D_315987564_4_4?", + "D_852278004_4_4?", + "D_391972881_4_4?", + "D_259089008_4_4?", + "D_209771602_4_4?", + "D_682651189_4_4?", + "D_750994269_4_4?", + "D_700889863_4_4?", + "D_990114799_4_4?", + "D_195363361_4_4?", + "D_216840563_4_4?", + "D_514034680_4_4?", + "D_247160067_4_4?", + "D_312545873_4_4?", + "SIBSUM_4_4", + "D_406098499_5_5?", + "D_579563781_5_5?", + "D_807431780_5_5?", + "D_589588769_5_5?", + "D_890637099_5_5?", + "D_869387390_5_5?", + "D_537137982_5_5?", + "D_607773106_5_5?", + "D_578895128_5_5?", + "D_384881609_5_5?", + "D_483975329_5_5?", + "D_570279754_5_5?", + "D_907590067_5_5?", + "D_860112841_5_5?", + "D_158354252_5_5?", + "D_654594205_5_5?", + "D_550722030_5_5?", + "D_142912472_5_5?", + "D_158409298_5_5?", + "D_529744595_5_5?", + "D_315987564_5_5?", + "D_852278004_5_5?", + "D_391972881_5_5?", + "D_259089008_5_5?", + "D_209771602_5_5?", + "D_682651189_5_5?", + "D_750994269_5_5?", + "D_700889863_5_5?", + "D_990114799_5_5?", + "D_195363361_5_5?", + "D_216840563_5_5?", + "D_514034680_5_5?", + "D_247160067_5_5?", + "D_312545873_5_5?", + "SIBSUM_5_5", + "D_406098499_6_6?", + "D_579563781_6_6?", + "D_807431780_6_6?", + "D_589588769_6_6?", + "D_890637099_6_6?", + "D_869387390_6_6?", + "D_537137982_6_6?", + "D_607773106_6_6?", + "D_578895128_6_6?", + "D_384881609_6_6?", + "D_483975329_6_6?", + "D_570279754_6_6?", + "D_907590067_6_6?", + "D_860112841_6_6?", + "D_158354252_6_6?", + "D_654594205_6_6?", + "D_550722030_6_6?", + "D_142912472_6_6?", + "D_158409298_6_6?", + "D_529744595_6_6?", + "D_315987564_6_6?", + "D_852278004_6_6?", + "D_391972881_6_6?", + "D_259089008_6_6?", + "D_209771602_6_6?", + "D_682651189_6_6?", + "D_750994269_6_6?", + "D_700889863_6_6?", + "D_990114799_6_6?", + "D_195363361_6_6?", + "D_216840563_6_6?", + "D_514034680_6_6?", + "D_247160067_6_6?", + "D_312545873_6_6?", + "SIBSUM_6_6", + "D_406098499_7_7?", + "D_579563781_7_7?", + "D_807431780_7_7?", + "D_589588769_7_7?", + "D_890637099_7_7?", + "D_869387390_7_7?", + "D_537137982_7_7?", + "D_607773106_7_7?", + "D_578895128_7_7?", + "D_384881609_7_7?", + "D_483975329_7_7?", + "D_570279754_7_7?", + "D_907590067_7_7?", + "D_860112841_7_7?", + "D_158354252_7_7?", + "D_654594205_7_7?", + "D_550722030_7_7?", + "D_142912472_7_7?", + "D_158409298_7_7?", + "D_529744595_7_7?", + "D_315987564_7_7?", + "D_852278004_7_7?", + "D_391972881_7_7?", + "D_259089008_7_7?", + "D_209771602_7_7?", + "D_682651189_7_7?", + "D_750994269_7_7?", + "D_700889863_7_7?", + "D_990114799_7_7?", + "D_195363361_7_7?", + "D_216840563_7_7?", + "D_514034680_7_7?", + "D_247160067_7_7?", + "D_312545873_7_7?", + "SIBSUM_7_7", + "D_406098499_8_8?", + "D_579563781_8_8?", + "D_807431780_8_8?", + "D_589588769_8_8?", + "D_890637099_8_8?", + "D_869387390_8_8?", + "D_537137982_8_8?", + "D_607773106_8_8?", + "D_578895128_8_8?", + "D_384881609_8_8?", + "D_483975329_8_8?", + "D_570279754_8_8?", + "D_907590067_8_8?", + "D_860112841_8_8?", + "D_158354252_8_8?", + "D_654594205_8_8?", + "D_550722030_8_8?", + "D_142912472_8_8?", + "D_158409298_8_8?", + "D_529744595_8_8?", + "D_315987564_8_8?", + "D_852278004_8_8?", + "D_391972881_8_8?", + "D_259089008_8_8?", + "D_209771602_8_8?", + "D_682651189_8_8?", + "D_750994269_8_8?", + "D_700889863_8_8?", + "D_990114799_8_8?", + "D_195363361_8_8?", + "D_216840563_8_8?", + "D_514034680_8_8?", + "D_247160067_8_8?", + "D_312545873_8_8?", + "SIBSUM_8_8", + "D_406098499_9_9?", + "D_579563781_9_9?", + "D_807431780_9_9?", + "D_589588769_9_9?", + "D_890637099_9_9?", + "D_869387390_9_9?", + "D_537137982_9_9?", + "D_607773106_9_9?", + "D_578895128_9_9?", + "D_384881609_9_9?", + "D_483975329_9_9?", + "D_570279754_9_9?", + "D_907590067_9_9?", + "D_860112841_9_9?", + "D_158354252_9_9?", + "D_654594205_9_9?", + "D_550722030_9_9?", + "D_142912472_9_9?", + "D_158409298_9_9?", + "D_529744595_9_9?", + "D_315987564_9_9?", + "D_852278004_9_9?", + "D_391972881_9_9?", + "D_259089008_9_9?", + "D_209771602_9_9?", + "D_682651189_9_9?", + "D_750994269_9_9?", + "D_700889863_9_9?", + "D_990114799_9_9?", + "D_195363361_9_9?", + "D_216840563_9_9?", + "D_514034680_9_9?", + "D_247160067_9_9?", + "D_312545873_9_9?", + "SIBSUM_9_9", + "D_406098499_10_10?", + "D_579563781_10_10?", + "D_807431780_10_10?", + "D_589588769_10_10?", + "D_890637099_10_10?", + "D_869387390_10_10?", + "D_537137982_10_10?", + "D_607773106_10_10?", + "D_578895128_10_10?", + "D_384881609_10_10?", + "D_483975329_10_10?", + "D_570279754_10_10?", + "D_907590067_10_10?", + "D_860112841_10_10?", + "D_158354252_10_10?", + "D_654594205_10_10?", + "D_550722030_10_10?", + "D_142912472_10_10?", + "D_158409298_10_10?", + "D_529744595_10_10?", + "D_315987564_10_10?", + "D_852278004_10_10?", + "D_391972881_10_10?", + "D_259089008_10_10?", + "D_209771602_10_10?", + "D_682651189_10_10?", + "D_750994269_10_10?", + "D_700889863_10_10?", + "D_990114799_10_10?", + "D_195363361_10_10?", + "D_216840563_10_10?", + "D_514034680_10_10?", + "D_247160067_10_10?", + "D_312545873_10_10?", + "SIBSUM_10_10", + "D_406098499_11_11?", + "D_579563781_11_11?", + "D_807431780_11_11?", + "D_589588769_11_11?", + "D_890637099_11_11?", + "D_869387390_11_11?", + "D_537137982_11_11?", + "D_607773106_11_11?", + "D_578895128_11_11?", + "D_384881609_11_11?", + "D_483975329_11_11?", + "D_570279754_11_11?", + "D_907590067_11_11?", + "D_860112841_11_11?", + "D_158354252_11_11?", + "D_654594205_11_11?", + "D_550722030_11_11?", + "D_142912472_11_11?", + "D_158409298_11_11?", + "D_529744595_11_11?", + "D_315987564_11_11?", + "D_852278004_11_11?", + "D_391972881_11_11?", + "D_259089008_11_11?", + "D_209771602_11_11?", + "D_682651189_11_11?", + "D_750994269_11_11?", + "D_700889863_11_11?", + "D_990114799_11_11?", + "D_195363361_11_11?", + "D_216840563_11_11?", + "D_514034680_11_11?", + "D_247160067_11_11?", + "D_312545873_11_11?", + "SIBSUM_11_11", + "D_406098499_12_12?", + "D_579563781_12_12?", + "D_807431780_12_12?", + "D_589588769_12_12?", + "D_890637099_12_12?", + "D_869387390_12_12?", + "D_537137982_12_12?", + "D_607773106_12_12?", + "D_578895128_12_12?", + "D_384881609_12_12?", + "D_483975329_12_12?", + "D_570279754_12_12?", + "D_907590067_12_12?", + "D_860112841_12_12?", + "D_158354252_12_12?", + "D_654594205_12_12?", + "D_550722030_12_12?", + "D_142912472_12_12?", + "D_158409298_12_12?", + "D_529744595_12_12?", + "D_315987564_12_12?", + "D_852278004_12_12?", + "D_391972881_12_12?", + "D_259089008_12_12?", + "D_209771602_12_12?", + "D_682651189_12_12?", + "D_750994269_12_12?", + "D_700889863_12_12?", + "D_990114799_12_12?", + "D_195363361_12_12?", + "D_216840563_12_12?", + "D_514034680_12_12?", + "D_247160067_12_12?", + "D_312545873_12_12?", + "SIBSUM_12_12", + "D_406098499_13_13?", + "D_579563781_13_13?", + "D_807431780_13_13?", + "D_589588769_13_13?", + "D_890637099_13_13?", + "D_869387390_13_13?", + "D_537137982_13_13?", + "D_607773106_13_13?", + "D_578895128_13_13?", + "D_384881609_13_13?", + "D_483975329_13_13?", + "D_570279754_13_13?", + "D_907590067_13_13?", + "D_860112841_13_13?", + "D_158354252_13_13?", + "D_654594205_13_13?", + "D_550722030_13_13?", + "D_142912472_13_13?", + "D_158409298_13_13?", + "D_529744595_13_13?", + "D_315987564_13_13?", + "D_852278004_13_13?", + "D_391972881_13_13?", + "D_259089008_13_13?", + "D_209771602_13_13?", + "D_682651189_13_13?", + "D_750994269_13_13?", + "D_700889863_13_13?", + "D_990114799_13_13?", + "D_195363361_13_13?", + "D_216840563_13_13?", + "D_514034680_13_13?", + "D_247160067_13_13?", + "D_312545873_13_13?", + "SIBSUM_13_13", + "D_406098499_14_14?", + "D_579563781_14_14?", + "D_807431780_14_14?", + "D_589588769_14_14?", + "D_890637099_14_14?", + "D_869387390_14_14?", + "D_537137982_14_14?", + "D_607773106_14_14?", + "D_578895128_14_14?", + "D_384881609_14_14?", + "D_483975329_14_14?", + "D_570279754_14_14?", + "D_907590067_14_14?", + "D_860112841_14_14?", + "D_158354252_14_14?", + "D_654594205_14_14?", + "D_550722030_14_14?", + "D_142912472_14_14?", + "D_158409298_14_14?", + "D_529744595_14_14?", + "D_315987564_14_14?", + "D_852278004_14_14?", + "D_391972881_14_14?", + "D_259089008_14_14?", + "D_209771602_14_14?", + "D_682651189_14_14?", + "D_750994269_14_14?", + "D_700889863_14_14?", + "D_990114799_14_14?", + "D_195363361_14_14?", + "D_216840563_14_14?", + "D_514034680_14_14?", + "D_247160067_14_14?", + "D_312545873_14_14?", + "SIBSUM_14_14", + "D_406098499_15_15?", + "D_579563781_15_15?", + "D_807431780_15_15?", + "D_589588769_15_15?", + "D_890637099_15_15?", + "D_869387390_15_15?", + "D_537137982_15_15?", + "D_607773106_15_15?", + "D_578895128_15_15?", + "D_384881609_15_15?", + "D_483975329_15_15?", + "D_570279754_15_15?", + "D_907590067_15_15?", + "D_860112841_15_15?", + "D_158354252_15_15?", + "D_654594205_15_15?", + "D_550722030_15_15?", + "D_142912472_15_15?", + "D_158409298_15_15?", + "D_529744595_15_15?", + "D_315987564_15_15?", + "D_852278004_15_15?", + "D_391972881_15_15?", + "D_259089008_15_15?", + "D_209771602_15_15?", + "D_682651189_15_15?", + "D_750994269_15_15?", + "D_700889863_15_15?", + "D_990114799_15_15?", + "D_195363361_15_15?", + "D_216840563_15_15?", + "D_514034680_15_15?", + "D_247160067_15_15?", + "D_312545873_15_15?", + "SIBSUM_15_15", + "D_406098499_16_16?", + "D_579563781_16_16?", + "D_807431780_16_16?", + "D_589588769_16_16?", + "D_890637099_16_16?", + "D_869387390_16_16?", + "D_537137982_16_16?", + "D_607773106_16_16?", + "D_578895128_16_16?", + "D_384881609_16_16?", + "D_483975329_16_16?", + "D_570279754_16_16?", + "D_907590067_16_16?", + "D_860112841_16_16?", + "D_158354252_16_16?", + "D_654594205_16_16?", + "D_550722030_16_16?", + "D_142912472_16_16?", + "D_158409298_16_16?", + "D_529744595_16_16?", + "D_315987564_16_16?", + "D_852278004_16_16?", + "D_391972881_16_16?", + "D_259089008_16_16?", + "D_209771602_16_16?", + "D_682651189_16_16?", + "D_750994269_16_16?", + "D_700889863_16_16?", + "D_990114799_16_16?", + "D_195363361_16_16?", + "D_216840563_16_16?", + "D_514034680_16_16?", + "D_247160067_16_16?", + "D_312545873_16_16?", + "SIBSUM_16_16", + "D_406098499_17_17?", + "D_579563781_17_17?", + "D_807431780_17_17?", + "D_589588769_17_17?", + "D_890637099_17_17?", + "D_869387390_17_17?", + "D_537137982_17_17?", + "D_607773106_17_17?", + "D_578895128_17_17?", + "D_384881609_17_17?", + "D_483975329_17_17?", + "D_570279754_17_17?", + "D_907590067_17_17?", + "D_860112841_17_17?", + "D_158354252_17_17?", + "D_654594205_17_17?", + "D_550722030_17_17?", + "D_142912472_17_17?", + "D_158409298_17_17?", + "D_529744595_17_17?", + "D_315987564_17_17?", + "D_852278004_17_17?", + "D_391972881_17_17?", + "D_259089008_17_17?", + "D_209771602_17_17?", + "D_682651189_17_17?", + "D_750994269_17_17?", + "D_700889863_17_17?", + "D_990114799_17_17?", + "D_195363361_17_17?", + "D_216840563_17_17?", + "D_514034680_17_17?", + "D_247160067_17_17?", + "D_312545873_17_17?", + "SIBSUM_17_17", + "D_406098499_18_18?", + "D_579563781_18_18?", + "D_807431780_18_18?", + "D_589588769_18_18?", + "D_890637099_18_18?", + "D_869387390_18_18?", + "D_537137982_18_18?", + "D_607773106_18_18?", + "D_578895128_18_18?", + "D_384881609_18_18?", + "D_483975329_18_18?", + "D_570279754_18_18?", + "D_907590067_18_18?", + "D_860112841_18_18?", + "D_158354252_18_18?", + "D_654594205_18_18?", + "D_550722030_18_18?", + "D_142912472_18_18?", + "D_158409298_18_18?", + "D_529744595_18_18?", + "D_315987564_18_18?", + "D_852278004_18_18?", + "D_391972881_18_18?", + "D_259089008_18_18?", + "D_209771602_18_18?", + "D_682651189_18_18?", + "D_750994269_18_18?", + "D_700889863_18_18?", + "D_990114799_18_18?", + "D_195363361_18_18?", + "D_216840563_18_18?", + "D_514034680_18_18?", + "D_247160067_18_18?", + "D_312545873_18_18?", + "SIBSUM_18_18", + "D_406098499_19_19?", + "D_579563781_19_19?", + "D_807431780_19_19?", + "D_589588769_19_19?", + "D_890637099_19_19?", + "D_869387390_19_19?", + "D_537137982_19_19?", + "D_607773106_19_19?", + "D_578895128_19_19?", + "D_384881609_19_19?", + "D_483975329_19_19?", + "D_570279754_19_19?", + "D_907590067_19_19?", + "D_860112841_19_19?", + "D_158354252_19_19?", + "D_654594205_19_19?", + "D_550722030_19_19?", + "D_142912472_19_19?", + "D_158409298_19_19?", + "D_529744595_19_19?", + "D_315987564_19_19?", + "D_852278004_19_19?", + "D_391972881_19_19?", + "D_259089008_19_19?", + "D_209771602_19_19?", + "D_682651189_19_19?", + "D_750994269_19_19?", + "D_700889863_19_19?", + "D_990114799_19_19?", + "D_195363361_19_19?", + "D_216840563_19_19?", + "D_514034680_19_19?", + "D_247160067_19_19?", + "D_312545873_19_19?", + "SIBSUM_19_19", + "D_406098499_20_20?", + "D_579563781_20_20?", + "D_807431780_20_20?", + "D_589588769_20_20?", + "D_890637099_20_20?", + "D_869387390_20_20?", + "D_537137982_20_20?", + "D_607773106_20_20?", + "D_578895128_20_20?", + "D_384881609_20_20?", + "D_483975329_20_20?", + "D_570279754_20_20?", + "D_907590067_20_20?", + "D_860112841_20_20?", + "D_158354252_20_20?", + "D_654594205_20_20?", + "D_550722030_20_20?", + "D_142912472_20_20?", + "D_158409298_20_20?", + "D_529744595_20_20?", + "D_315987564_20_20?", + "D_852278004_20_20?", + "D_391972881_20_20?", + "D_259089008_20_20?", + "D_209771602_20_20?", + "D_682651189_20_20?", + "D_750994269_20_20?", + "D_700889863_20_20?", + "D_990114799_20_20?", + "D_195363361_20_20?", + "D_216840563_20_20?", + "D_514034680_20_20?", + "D_247160067_20_20?", + "D_312545873_20_20?", + "SIBSUM_20_20", + "D_406098499_21_21?", + "D_579563781_21_21?", + "D_807431780_21_21?", + "D_589588769_21_21?", + "D_890637099_21_21?", + "D_869387390_21_21?", + "D_537137982_21_21?", + "D_607773106_21_21?", + "D_578895128_21_21?", + "D_384881609_21_21?", + "D_483975329_21_21?", + "D_570279754_21_21?", + "D_907590067_21_21?", + "D_860112841_21_21?", + "D_158354252_21_21?", + "D_654594205_21_21?", + "D_550722030_21_21?", + "D_142912472_21_21?", + "D_158409298_21_21?", + "D_529744595_21_21?", + "D_315987564_21_21?", + "D_852278004_21_21?", + "D_391972881_21_21?", + "D_259089008_21_21?", + "D_209771602_21_21?", + "D_682651189_21_21?", + "D_750994269_21_21?", + "D_700889863_21_21?", + "D_990114799_21_21?", + "D_195363361_21_21?", + "D_216840563_21_21?", + "D_514034680_21_21?", + "D_247160067_21_21?", + "D_312545873_21_21?", + "SIBSUM_21_21", + "D_406098499_22_22?", + "D_579563781_22_22?", + "D_807431780_22_22?", + "D_589588769_22_22?", + "D_890637099_22_22?", + "D_869387390_22_22?", + "D_537137982_22_22?", + "D_607773106_22_22?", + "D_578895128_22_22?", + "D_384881609_22_22?", + "D_483975329_22_22?", + "D_570279754_22_22?", + "D_907590067_22_22?", + "D_860112841_22_22?", + "D_158354252_22_22?", + "D_654594205_22_22?", + "D_550722030_22_22?", + "D_142912472_22_22?", + "D_158409298_22_22?", + "D_529744595_22_22?", + "D_315987564_22_22?", + "D_852278004_22_22?", + "D_391972881_22_22?", + "D_259089008_22_22?", + "D_209771602_22_22?", + "D_682651189_22_22?", + "D_750994269_22_22?", + "D_700889863_22_22?", + "D_990114799_22_22?", + "D_195363361_22_22?", + "D_216840563_22_22?", + "D_514034680_22_22?", + "D_247160067_22_22?", + "D_312545873_22_22?", + "SIBSUM_22_22", + "D_406098499_23_23?", + "D_579563781_23_23?", + "D_807431780_23_23?", + "D_589588769_23_23?", + "D_890637099_23_23?", + "D_869387390_23_23?", + "D_537137982_23_23?", + "D_607773106_23_23?", + "D_578895128_23_23?", + "D_384881609_23_23?", + "D_483975329_23_23?", + "D_570279754_23_23?", + "D_907590067_23_23?", + "D_860112841_23_23?", + "D_158354252_23_23?", + "D_654594205_23_23?", + "D_550722030_23_23?", + "D_142912472_23_23?", + "D_158409298_23_23?", + "D_529744595_23_23?", + "D_315987564_23_23?", + "D_852278004_23_23?", + "D_391972881_23_23?", + "D_259089008_23_23?", + "D_209771602_23_23?", + "D_682651189_23_23?", + "D_750994269_23_23?", + "D_700889863_23_23?", + "D_990114799_23_23?", + "D_195363361_23_23?", + "D_216840563_23_23?", + "D_514034680_23_23?", + "D_247160067_23_23?", + "D_312545873_23_23?", + "SIBSUM_23_23", + "D_406098499_24_24?", + "D_579563781_24_24?", + "D_807431780_24_24?", + "D_589588769_24_24?", + "D_890637099_24_24?", + "D_869387390_24_24?", + "D_537137982_24_24?", + "D_607773106_24_24?", + "D_578895128_24_24?", + "D_384881609_24_24?", + "D_483975329_24_24?", + "D_570279754_24_24?", + "D_907590067_24_24?", + "D_860112841_24_24?", + "D_158354252_24_24?", + "D_654594205_24_24?", + "D_550722030_24_24?", + "D_142912472_24_24?", + "D_158409298_24_24?", + "D_529744595_24_24?", + "D_315987564_24_24?", + "D_852278004_24_24?", + "D_391972881_24_24?", + "D_259089008_24_24?", + "D_209771602_24_24?", + "D_682651189_24_24?", + "D_750994269_24_24?", + "D_700889863_24_24?", + "D_990114799_24_24?", + "D_195363361_24_24?", + "D_216840563_24_24?", + "D_514034680_24_24?", + "D_247160067_24_24?", + "D_312545873_24_24?", + "SIBSUM_24_24", + "D_406098499_25_25?", + "D_579563781_25_25?", + "D_807431780_25_25?", + "D_589588769_25_25?", + "D_890637099_25_25?", + "D_869387390_25_25?", + "D_537137982_25_25?", + "D_607773106_25_25?", + "D_578895128_25_25?", + "D_384881609_25_25?", + "D_483975329_25_25?", + "D_570279754_25_25?", + "D_907590067_25_25?", + "D_860112841_25_25?", + "D_158354252_25_25?", + "D_654594205_25_25?", + "D_550722030_25_25?", + "D_142912472_25_25?", + "D_158409298_25_25?", + "D_529744595_25_25?", + "D_315987564_25_25?", + "D_852278004_25_25?", + "D_391972881_25_25?", + "D_259089008_25_25?", + "D_209771602_25_25?", + "D_682651189_25_25?", + "D_750994269_25_25?", + "D_700889863_25_25?", + "D_990114799_25_25?", + "D_195363361_25_25?", + "D_216840563_25_25?", + "D_514034680_25_25?", + "D_247160067_25_25?", + "D_312545873_25_25?", + "SIBSUM_25_25", + "END_OF_LOOP", + "CHILD", + "D_446999144!", + "CHILDCONFIRM", + "D_714001034_1_1?", + "D_887697329_1_1?", + "D_473529484_1_1?", + "D_873968217_1_1?", + "D_418392907_1_1?", + "D_640010727_1_1?", + "D_236590500_1_1?", + "D_718867914_1_1?", + "D_812370563_1_1?", + "D_900939817_1_1?", + "D_938150507_1_1?", + "D_601211723_1_1?", + "D_861788020_1_1?", + "D_204425387_1_1?", + "D_558929585_1_1?", + "D_233764880_1_1?", + "D_905145893_1_1?", + "D_473190270_1_1?", + "D_483735587_1_1?", + "D_331759900_1_1?", + "D_513077276_1_1?", + "D_519974530_1_1?", + "D_907776050_1_1?", + "D_271684775_1_1?", + "D_252160589_1_1?", + "D_774774759_1_1?", + "D_127257956_1_1?", + "D_496917282_1_1?", + "D_908129316_1_1?", + "D_795003496_1_1?", + "D_969177591_1_1?", + "D_116065851_1_1?", + "D_278159347_1_1?", + "D_845219872_1_1?", + "CHILDSUM_1_1", + "D_714001034_2_2?", + "D_887697329_2_2?", + "D_473529484_2_2?", + "D_873968217_2_2?", + "D_418392907_2_2?", + "D_640010727_2_2?", + "D_236590500_2_2?", + "D_718867914_2_2?", + "D_812370563_2_2?", + "D_900939817_2_2?", + "D_938150507_2_2?", + "D_601211723_2_2?", + "D_861788020_2_2?", + "D_204425387_2_2?", + "D_558929585_2_2?", + "D_233764880_2_2?", + "D_905145893_2_2?", + "D_473190270_2_2?", + "D_483735587_2_2?", + "D_331759900_2_2?", + "D_513077276_2_2?", + "D_519974530_2_2?", + "D_907776050_2_2?", + "D_271684775_2_2?", + "D_252160589_2_2?", + "D_774774759_2_2?", + "D_127257956_2_2?", + "D_496917282_2_2?", + "D_908129316_2_2?", + "D_795003496_2_2?", + "D_969177591_2_2?", + "D_116065851_2_2?", + "D_278159347_2_2?", + "D_845219872_2_2?", + "CHILDSUM_2_2", + "D_714001034_3_3?", + "D_887697329_3_3?", + "D_473529484_3_3?", + "D_873968217_3_3?", + "D_418392907_3_3?", + "D_640010727_3_3?", + "D_236590500_3_3?", + "D_718867914_3_3?", + "D_812370563_3_3?", + "D_900939817_3_3?", + "D_938150507_3_3?", + "D_601211723_3_3?", + "D_861788020_3_3?", + "D_204425387_3_3?", + "D_558929585_3_3?", + "D_233764880_3_3?", + "D_905145893_3_3?", + "D_473190270_3_3?", + "D_483735587_3_3?", + "D_331759900_3_3?", + "D_513077276_3_3?", + "D_519974530_3_3?", + "D_907776050_3_3?", + "D_271684775_3_3?", + "D_252160589_3_3?", + "D_774774759_3_3?", + "D_127257956_3_3?", + "D_496917282_3_3?", + "D_908129316_3_3?", + "D_795003496_3_3?", + "D_969177591_3_3?", + "D_116065851_3_3?", + "D_278159347_3_3?", + "D_845219872_3_3?", + "CHILDSUM_3_3", + "D_714001034_4_4?", + "D_887697329_4_4?", + "D_473529484_4_4?", + "D_873968217_4_4?", + "D_418392907_4_4?", + "D_640010727_4_4?", + "D_236590500_4_4?", + "D_718867914_4_4?", + "D_812370563_4_4?", + "D_900939817_4_4?", + "D_938150507_4_4?", + "D_601211723_4_4?", + "D_861788020_4_4?", + "D_204425387_4_4?", + "D_558929585_4_4?", + "D_233764880_4_4?", + "D_905145893_4_4?", + "D_473190270_4_4?", + "D_483735587_4_4?", + "D_331759900_4_4?", + "D_513077276_4_4?", + "D_519974530_4_4?", + "D_907776050_4_4?", + "D_271684775_4_4?", + "D_252160589_4_4?", + "D_774774759_4_4?", + "D_127257956_4_4?", + "D_496917282_4_4?", + "D_908129316_4_4?", + "D_795003496_4_4?", + "D_969177591_4_4?", + "D_116065851_4_4?", + "D_278159347_4_4?", + "D_845219872_4_4?", + "CHILDSUM_4_4", + "D_714001034_5_5?", + "D_887697329_5_5?", + "D_473529484_5_5?", + "D_873968217_5_5?", + "D_418392907_5_5?", + "D_640010727_5_5?", + "D_236590500_5_5?", + "D_718867914_5_5?", + "D_812370563_5_5?", + "D_900939817_5_5?", + "D_938150507_5_5?", + "D_601211723_5_5?", + "D_861788020_5_5?", + "D_204425387_5_5?", + "D_558929585_5_5?", + "D_233764880_5_5?", + "D_905145893_5_5?", + "D_473190270_5_5?", + "D_483735587_5_5?", + "D_331759900_5_5?", + "D_513077276_5_5?", + "D_519974530_5_5?", + "D_907776050_5_5?", + "D_271684775_5_5?", + "D_252160589_5_5?", + "D_774774759_5_5?", + "D_127257956_5_5?", + "D_496917282_5_5?", + "D_908129316_5_5?", + "D_795003496_5_5?", + "D_969177591_5_5?", + "D_116065851_5_5?", + "D_278159347_5_5?", + "D_845219872_5_5?", + "CHILDSUM_5_5", + "D_714001034_6_6?", + "D_887697329_6_6?", + "D_473529484_6_6?", + "D_873968217_6_6?", + "D_418392907_6_6?", + "D_640010727_6_6?", + "D_236590500_6_6?", + "D_718867914_6_6?", + "D_812370563_6_6?", + "D_900939817_6_6?", + "D_938150507_6_6?", + "D_601211723_6_6?", + "D_861788020_6_6?", + "D_204425387_6_6?", + "D_558929585_6_6?", + "D_233764880_6_6?", + "D_905145893_6_6?", + "D_473190270_6_6?", + "D_483735587_6_6?", + "D_331759900_6_6?", + "D_513077276_6_6?", + "D_519974530_6_6?", + "D_907776050_6_6?", + "D_271684775_6_6?", + "D_252160589_6_6?", + "D_774774759_6_6?", + "D_127257956_6_6?", + "D_496917282_6_6?", + "D_908129316_6_6?", + "D_795003496_6_6?", + "D_969177591_6_6?", + "D_116065851_6_6?", + "D_278159347_6_6?", + "D_845219872_6_6?", + "CHILDSUM_6_6", + "D_714001034_7_7?", + "D_887697329_7_7?", + "D_473529484_7_7?", + "D_873968217_7_7?", + "D_418392907_7_7?", + "D_640010727_7_7?", + "D_236590500_7_7?", + "D_718867914_7_7?", + "D_812370563_7_7?", + "D_900939817_7_7?", + "D_938150507_7_7?", + "D_601211723_7_7?", + "D_861788020_7_7?", + "D_204425387_7_7?", + "D_558929585_7_7?", + "D_233764880_7_7?", + "D_905145893_7_7?", + "D_473190270_7_7?", + "D_483735587_7_7?", + "D_331759900_7_7?", + "D_513077276_7_7?", + "D_519974530_7_7?", + "D_907776050_7_7?", + "D_271684775_7_7?", + "D_252160589_7_7?", + "D_774774759_7_7?", + "D_127257956_7_7?", + "D_496917282_7_7?", + "D_908129316_7_7?", + "D_795003496_7_7?", + "D_969177591_7_7?", + "D_116065851_7_7?", + "D_278159347_7_7?", + "D_845219872_7_7?", + "CHILDSUM_7_7", + "D_714001034_8_8?", + "D_887697329_8_8?", + "D_473529484_8_8?", + "D_873968217_8_8?", + "D_418392907_8_8?", + "D_640010727_8_8?", + "D_236590500_8_8?", + "D_718867914_8_8?", + "D_812370563_8_8?", + "D_900939817_8_8?", + "D_938150507_8_8?", + "D_601211723_8_8?", + "D_861788020_8_8?", + "D_204425387_8_8?", + "D_558929585_8_8?", + "D_233764880_8_8?", + "D_905145893_8_8?", + "D_473190270_8_8?", + "D_483735587_8_8?", + "D_331759900_8_8?", + "D_513077276_8_8?", + "D_519974530_8_8?", + "D_907776050_8_8?", + "D_271684775_8_8?", + "D_252160589_8_8?", + "D_774774759_8_8?", + "D_127257956_8_8?", + "D_496917282_8_8?", + "D_908129316_8_8?", + "D_795003496_8_8?", + "D_969177591_8_8?", + "D_116065851_8_8?", + "D_278159347_8_8?", + "D_845219872_8_8?", + "CHILDSUM_8_8", + "D_714001034_9_9?", + "D_887697329_9_9?", + "D_473529484_9_9?", + "D_873968217_9_9?", + "D_418392907_9_9?", + "D_640010727_9_9?", + "D_236590500_9_9?", + "D_718867914_9_9?", + "D_812370563_9_9?", + "D_900939817_9_9?", + "D_938150507_9_9?", + "D_601211723_9_9?", + "D_861788020_9_9?", + "D_204425387_9_9?", + "D_558929585_9_9?", + "D_233764880_9_9?", + "D_905145893_9_9?", + "D_473190270_9_9?", + "D_483735587_9_9?", + "D_331759900_9_9?", + "D_513077276_9_9?", + "D_519974530_9_9?", + "D_907776050_9_9?", + "D_271684775_9_9?", + "D_252160589_9_9?", + "D_774774759_9_9?", + "D_127257956_9_9?", + "D_496917282_9_9?", + "D_908129316_9_9?", + "D_795003496_9_9?", + "D_969177591_9_9?", + "D_116065851_9_9?", + "D_278159347_9_9?", + "D_845219872_9_9?", + "CHILDSUM_9_9", + "D_714001034_10_10?", + "D_887697329_10_10?", + "D_473529484_10_10?", + "D_873968217_10_10?", + "D_418392907_10_10?", + "D_640010727_10_10?", + "D_236590500_10_10?", + "D_718867914_10_10?", + "D_812370563_10_10?", + "D_900939817_10_10?", + "D_938150507_10_10?", + "D_601211723_10_10?", + "D_861788020_10_10?", + "D_204425387_10_10?", + "D_558929585_10_10?", + "D_233764880_10_10?", + "D_905145893_10_10?", + "D_473190270_10_10?", + "D_483735587_10_10?", + "D_331759900_10_10?", + "D_513077276_10_10?", + "D_519974530_10_10?", + "D_907776050_10_10?", + "D_271684775_10_10?", + "D_252160589_10_10?", + "D_774774759_10_10?", + "D_127257956_10_10?", + "D_496917282_10_10?", + "D_908129316_10_10?", + "D_795003496_10_10?", + "D_969177591_10_10?", + "D_116065851_10_10?", + "D_278159347_10_10?", + "D_845219872_10_10?", + "CHILDSUM_10_10", + "D_714001034_11_11?", + "D_887697329_11_11?", + "D_473529484_11_11?", + "D_873968217_11_11?", + "D_418392907_11_11?", + "D_640010727_11_11?", + "D_236590500_11_11?", + "D_718867914_11_11?", + "D_812370563_11_11?", + "D_900939817_11_11?", + "D_938150507_11_11?", + "D_601211723_11_11?", + "D_861788020_11_11?", + "D_204425387_11_11?", + "D_558929585_11_11?", + "D_233764880_11_11?", + "D_905145893_11_11?", + "D_473190270_11_11?", + "D_483735587_11_11?", + "D_331759900_11_11?", + "D_513077276_11_11?", + "D_519974530_11_11?", + "D_907776050_11_11?", + "D_271684775_11_11?", + "D_252160589_11_11?", + "D_774774759_11_11?", + "D_127257956_11_11?", + "D_496917282_11_11?", + "D_908129316_11_11?", + "D_795003496_11_11?", + "D_969177591_11_11?", + "D_116065851_11_11?", + "D_278159347_11_11?", + "D_845219872_11_11?", + "CHILDSUM_11_11", + "D_714001034_12_12?", + "D_887697329_12_12?", + "D_473529484_12_12?", + "D_873968217_12_12?", + "D_418392907_12_12?", + "D_640010727_12_12?", + "D_236590500_12_12?", + "D_718867914_12_12?", + "D_812370563_12_12?", + "D_900939817_12_12?", + "D_938150507_12_12?", + "D_601211723_12_12?", + "D_861788020_12_12?", + "D_204425387_12_12?", + "D_558929585_12_12?", + "D_233764880_12_12?", + "D_905145893_12_12?", + "D_473190270_12_12?", + "D_483735587_12_12?", + "D_331759900_12_12?", + "D_513077276_12_12?", + "D_519974530_12_12?", + "D_907776050_12_12?", + "D_271684775_12_12?", + "D_252160589_12_12?", + "D_774774759_12_12?", + "D_127257956_12_12?", + "D_496917282_12_12?", + "D_908129316_12_12?", + "D_795003496_12_12?", + "D_969177591_12_12?", + "D_116065851_12_12?", + "D_278159347_12_12?", + "D_845219872_12_12?", + "CHILDSUM_12_12", + "D_714001034_13_13?", + "D_887697329_13_13?", + "D_473529484_13_13?", + "D_873968217_13_13?", + "D_418392907_13_13?", + "D_640010727_13_13?", + "D_236590500_13_13?", + "D_718867914_13_13?", + "D_812370563_13_13?", + "D_900939817_13_13?", + "D_938150507_13_13?", + "D_601211723_13_13?", + "D_861788020_13_13?", + "D_204425387_13_13?", + "D_558929585_13_13?", + "D_233764880_13_13?", + "D_905145893_13_13?", + "D_473190270_13_13?", + "D_483735587_13_13?", + "D_331759900_13_13?", + "D_513077276_13_13?", + "D_519974530_13_13?", + "D_907776050_13_13?", + "D_271684775_13_13?", + "D_252160589_13_13?", + "D_774774759_13_13?", + "D_127257956_13_13?", + "D_496917282_13_13?", + "D_908129316_13_13?", + "D_795003496_13_13?", + "D_969177591_13_13?", + "D_116065851_13_13?", + "D_278159347_13_13?", + "D_845219872_13_13?", + "CHILDSUM_13_13", + "D_714001034_14_14?", + "D_887697329_14_14?", + "D_473529484_14_14?", + "D_873968217_14_14?", + "D_418392907_14_14?", + "D_640010727_14_14?", + "D_236590500_14_14?", + "D_718867914_14_14?", + "D_812370563_14_14?", + "D_900939817_14_14?", + "D_938150507_14_14?", + "D_601211723_14_14?", + "D_861788020_14_14?", + "D_204425387_14_14?", + "D_558929585_14_14?", + "D_233764880_14_14?", + "D_905145893_14_14?", + "D_473190270_14_14?", + "D_483735587_14_14?", + "D_331759900_14_14?", + "D_513077276_14_14?", + "D_519974530_14_14?", + "D_907776050_14_14?", + "D_271684775_14_14?", + "D_252160589_14_14?", + "D_774774759_14_14?", + "D_127257956_14_14?", + "D_496917282_14_14?", + "D_908129316_14_14?", + "D_795003496_14_14?", + "D_969177591_14_14?", + "D_116065851_14_14?", + "D_278159347_14_14?", + "D_845219872_14_14?", + "CHILDSUM_14_14", + "D_714001034_15_15?", + "D_887697329_15_15?", + "D_473529484_15_15?", + "D_873968217_15_15?", + "D_418392907_15_15?", + "D_640010727_15_15?", + "D_236590500_15_15?", + "D_718867914_15_15?", + "D_812370563_15_15?", + "D_900939817_15_15?", + "D_938150507_15_15?", + "D_601211723_15_15?", + "D_861788020_15_15?", + "D_204425387_15_15?", + "D_558929585_15_15?", + "D_233764880_15_15?", + "D_905145893_15_15?", + "D_473190270_15_15?", + "D_483735587_15_15?", + "D_331759900_15_15?", + "D_513077276_15_15?", + "D_519974530_15_15?", + "D_907776050_15_15?", + "D_271684775_15_15?", + "D_252160589_15_15?", + "D_774774759_15_15?", + "D_127257956_15_15?", + "D_496917282_15_15?", + "D_908129316_15_15?", + "D_795003496_15_15?", + "D_969177591_15_15?", + "D_116065851_15_15?", + "D_278159347_15_15?", + "D_845219872_15_15?", + "CHILDSUM_15_15", + "D_714001034_16_16?", + "D_887697329_16_16?", + "D_473529484_16_16?", + "D_873968217_16_16?", + "D_418392907_16_16?", + "D_640010727_16_16?", + "D_236590500_16_16?", + "D_718867914_16_16?", + "D_812370563_16_16?", + "D_900939817_16_16?", + "D_938150507_16_16?", + "D_601211723_16_16?", + "D_861788020_16_16?", + "D_204425387_16_16?", + "D_558929585_16_16?", + "D_233764880_16_16?", + "D_905145893_16_16?", + "D_473190270_16_16?", + "D_483735587_16_16?", + "D_331759900_16_16?", + "D_513077276_16_16?", + "D_519974530_16_16?", + "D_907776050_16_16?", + "D_271684775_16_16?", + "D_252160589_16_16?", + "D_774774759_16_16?", + "D_127257956_16_16?", + "D_496917282_16_16?", + "D_908129316_16_16?", + "D_795003496_16_16?", + "D_969177591_16_16?", + "D_116065851_16_16?", + "D_278159347_16_16?", + "D_845219872_16_16?", + "CHILDSUM_16_16", + "D_714001034_17_17?", + "D_887697329_17_17?", + "D_473529484_17_17?", + "D_873968217_17_17?", + "D_418392907_17_17?", + "D_640010727_17_17?", + "D_236590500_17_17?", + "D_718867914_17_17?", + "D_812370563_17_17?", + "D_900939817_17_17?", + "D_938150507_17_17?", + "D_601211723_17_17?", + "D_861788020_17_17?", + "D_204425387_17_17?", + "D_558929585_17_17?", + "D_233764880_17_17?", + "D_905145893_17_17?", + "D_473190270_17_17?", + "D_483735587_17_17?", + "D_331759900_17_17?", + "D_513077276_17_17?", + "D_519974530_17_17?", + "D_907776050_17_17?", + "D_271684775_17_17?", + "D_252160589_17_17?", + "D_774774759_17_17?", + "D_127257956_17_17?", + "D_496917282_17_17?", + "D_908129316_17_17?", + "D_795003496_17_17?", + "D_969177591_17_17?", + "D_116065851_17_17?", + "D_278159347_17_17?", + "D_845219872_17_17?", + "CHILDSUM_17_17", + "D_714001034_18_18?", + "D_887697329_18_18?", + "D_473529484_18_18?", + "D_873968217_18_18?", + "D_418392907_18_18?", + "D_640010727_18_18?", + "D_236590500_18_18?", + "D_718867914_18_18?", + "D_812370563_18_18?", + "D_900939817_18_18?", + "D_938150507_18_18?", + "D_601211723_18_18?", + "D_861788020_18_18?", + "D_204425387_18_18?", + "D_558929585_18_18?", + "D_233764880_18_18?", + "D_905145893_18_18?", + "D_473190270_18_18?", + "D_483735587_18_18?", + "D_331759900_18_18?", + "D_513077276_18_18?", + "D_519974530_18_18?", + "D_907776050_18_18?", + "D_271684775_18_18?", + "D_252160589_18_18?", + "D_774774759_18_18?", + "D_127257956_18_18?", + "D_496917282_18_18?", + "D_908129316_18_18?", + "D_795003496_18_18?", + "D_969177591_18_18?", + "D_116065851_18_18?", + "D_278159347_18_18?", + "D_845219872_18_18?", + "CHILDSUM_18_18", + "D_714001034_19_19?", + "D_887697329_19_19?", + "D_473529484_19_19?", + "D_873968217_19_19?", + "D_418392907_19_19?", + "D_640010727_19_19?", + "D_236590500_19_19?", + "D_718867914_19_19?", + "D_812370563_19_19?", + "D_900939817_19_19?", + "D_938150507_19_19?", + "D_601211723_19_19?", + "D_861788020_19_19?", + "D_204425387_19_19?", + "D_558929585_19_19?", + "D_233764880_19_19?", + "D_905145893_19_19?", + "D_473190270_19_19?", + "D_483735587_19_19?", + "D_331759900_19_19?", + "D_513077276_19_19?", + "D_519974530_19_19?", + "D_907776050_19_19?", + "D_271684775_19_19?", + "D_252160589_19_19?", + "D_774774759_19_19?", + "D_127257956_19_19?", + "D_496917282_19_19?", + "D_908129316_19_19?", + "D_795003496_19_19?", + "D_969177591_19_19?", + "D_116065851_19_19?", + "D_278159347_19_19?", + "D_845219872_19_19?", + "CHILDSUM_19_19", + "D_714001034_20_20?", + "D_887697329_20_20?", + "D_473529484_20_20?", + "D_873968217_20_20?", + "D_418392907_20_20?", + "D_640010727_20_20?", + "D_236590500_20_20?", + "D_718867914_20_20?", + "D_812370563_20_20?", + "D_900939817_20_20?", + "D_938150507_20_20?", + "D_601211723_20_20?", + "D_861788020_20_20?", + "D_204425387_20_20?", + "D_558929585_20_20?", + "D_233764880_20_20?", + "D_905145893_20_20?", + "D_473190270_20_20?", + "D_483735587_20_20?", + "D_331759900_20_20?", + "D_513077276_20_20?", + "D_519974530_20_20?", + "D_907776050_20_20?", + "D_271684775_20_20?", + "D_252160589_20_20?", + "D_774774759_20_20?", + "D_127257956_20_20?", + "D_496917282_20_20?", + "D_908129316_20_20?", + "D_795003496_20_20?", + "D_969177591_20_20?", + "D_116065851_20_20?", + "D_278159347_20_20?", + "D_845219872_20_20?", + "CHILDSUM_20_20", + "D_714001034_21_21?", + "D_887697329_21_21?", + "D_473529484_21_21?", + "D_873968217_21_21?", + "D_418392907_21_21?", + "D_640010727_21_21?", + "D_236590500_21_21?", + "D_718867914_21_21?", + "D_812370563_21_21?", + "D_900939817_21_21?", + "D_938150507_21_21?", + "D_601211723_21_21?", + "D_861788020_21_21?", + "D_204425387_21_21?", + "D_558929585_21_21?", + "D_233764880_21_21?", + "D_905145893_21_21?", + "D_473190270_21_21?", + "D_483735587_21_21?", + "D_331759900_21_21?", + "D_513077276_21_21?", + "D_519974530_21_21?", + "D_907776050_21_21?", + "D_271684775_21_21?", + "D_252160589_21_21?", + "D_774774759_21_21?", + "D_127257956_21_21?", + "D_496917282_21_21?", + "D_908129316_21_21?", + "D_795003496_21_21?", + "D_969177591_21_21?", + "D_116065851_21_21?", + "D_278159347_21_21?", + "D_845219872_21_21?", + "CHILDSUM_21_21", + "D_714001034_22_22?", + "D_887697329_22_22?", + "D_473529484_22_22?", + "D_873968217_22_22?", + "D_418392907_22_22?", + "D_640010727_22_22?", + "D_236590500_22_22?", + "D_718867914_22_22?", + "D_812370563_22_22?", + "D_900939817_22_22?", + "D_938150507_22_22?", + "D_601211723_22_22?", + "D_861788020_22_22?", + "D_204425387_22_22?", + "D_558929585_22_22?", + "D_233764880_22_22?", + "D_905145893_22_22?", + "D_473190270_22_22?", + "D_483735587_22_22?", + "D_331759900_22_22?", + "D_513077276_22_22?", + "D_519974530_22_22?", + "D_907776050_22_22?", + "D_271684775_22_22?", + "D_252160589_22_22?", + "D_774774759_22_22?", + "D_127257956_22_22?", + "D_496917282_22_22?", + "D_908129316_22_22?", + "D_795003496_22_22?", + "D_969177591_22_22?", + "D_116065851_22_22?", + "D_278159347_22_22?", + "D_845219872_22_22?", + "CHILDSUM_22_22", + "D_714001034_23_23?", + "D_887697329_23_23?", + "D_473529484_23_23?", + "D_873968217_23_23?", + "D_418392907_23_23?", + "D_640010727_23_23?", + "D_236590500_23_23?", + "D_718867914_23_23?", + "D_812370563_23_23?", + "D_900939817_23_23?", + "D_938150507_23_23?", + "D_601211723_23_23?", + "D_861788020_23_23?", + "D_204425387_23_23?", + "D_558929585_23_23?", + "D_233764880_23_23?", + "D_905145893_23_23?", + "D_473190270_23_23?", + "D_483735587_23_23?", + "D_331759900_23_23?", + "D_513077276_23_23?", + "D_519974530_23_23?", + "D_907776050_23_23?", + "D_271684775_23_23?", + "D_252160589_23_23?", + "D_774774759_23_23?", + "D_127257956_23_23?", + "D_496917282_23_23?", + "D_908129316_23_23?", + "D_795003496_23_23?", + "D_969177591_23_23?", + "D_116065851_23_23?", + "D_278159347_23_23?", + "D_845219872_23_23?", + "CHILDSUM_23_23", + "D_714001034_24_24?", + "D_887697329_24_24?", + "D_473529484_24_24?", + "D_873968217_24_24?", + "D_418392907_24_24?", + "D_640010727_24_24?", + "D_236590500_24_24?", + "D_718867914_24_24?", + "D_812370563_24_24?", + "D_900939817_24_24?", + "D_938150507_24_24?", + "D_601211723_24_24?", + "D_861788020_24_24?", + "D_204425387_24_24?", + "D_558929585_24_24?", + "D_233764880_24_24?", + "D_905145893_24_24?", + "D_473190270_24_24?", + "D_483735587_24_24?", + "D_331759900_24_24?", + "D_513077276_24_24?", + "D_519974530_24_24?", + "D_907776050_24_24?", + "D_271684775_24_24?", + "D_252160589_24_24?", + "D_774774759_24_24?", + "D_127257956_24_24?", + "D_496917282_24_24?", + "D_908129316_24_24?", + "D_795003496_24_24?", + "D_969177591_24_24?", + "D_116065851_24_24?", + "D_278159347_24_24?", + "D_845219872_24_24?", + "CHILDSUM_24_24", + "D_714001034_25_25?", + "D_887697329_25_25?", + "D_473529484_25_25?", + "D_873968217_25_25?", + "D_418392907_25_25?", + "D_640010727_25_25?", + "D_236590500_25_25?", + "D_718867914_25_25?", + "D_812370563_25_25?", + "D_900939817_25_25?", + "D_938150507_25_25?", + "D_601211723_25_25?", + "D_861788020_25_25?", + "D_204425387_25_25?", + "D_558929585_25_25?", + "D_233764880_25_25?", + "D_905145893_25_25?", + "D_473190270_25_25?", + "D_483735587_25_25?", + "D_331759900_25_25?", + "D_513077276_25_25?", + "D_519974530_25_25?", + "D_907776050_25_25?", + "D_271684775_25_25?", + "D_252160589_25_25?", + "D_774774759_25_25?", + "D_127257956_25_25?", + "D_496917282_25_25?", + "D_908129316_25_25?", + "D_795003496_25_25?", + "D_969177591_25_25?", + "D_116065851_25_25?", + "D_278159347_25_25?", + "D_845219872_25_25?", + "CHILDSUM_25_25", + "END_OF_LOOP", + "SECTION5", + "D_367803647?", + "D_784967158?", + "D_613744428?", + "D_114529380?", + "D_627122657?", + "D_796828094?", + "D_761310265?", + "D_434316600?", + "D_700374192?", + "D_868232409?", + "D_739294356?", + "D_847533056?", + "D_403258164?", + "D_118061122?", + "D_518387017?", + "D_279637054?", + "D_988878019?", + "D_530742915?", + "D_233198706?", + "D_686172464?", + "D_759004335?", + "D_641651634?", + "D_431721131?", + "END" + ], + "responseControlsByType": { + "checkbox": 1725, + "number": 2874, + "radio": 883, + "text": 126, + "textarea": 2 + }, + "explicitTransitions": { + "targets": [ + "D_362270886", + "D_525535977", + "D_976808005", + "D_308014437", + "D_351657815", + "D_115616118", + "D_797626610", + "D_588212264", + "D_167101091", + "D_965917116", + "D_929240175", + "D_836712013", + "D_836890480", + "D_624479779", + "D_337278854", + "D_681229479", + "D_660358706", + "D_884793537", + "D_460062034", + "D_110652436", + "D_894259747", + "D_448722126", + "D_201449164", + "D_436333358", + "D_180961306", + "D_554782332", + "D_409622468", + "D_448476881", + "D_459764934", + "D_374697037", + "D_580911251", + "D_190347832", + "D_624777141", + "D_980403315", + "D_936039586", + "D_430472084", + "D_900541533", + "D_139655599", + "D_494032093", + "D_810918716", + "D_874046190", + "D_301679110", + "D_989016875", + "D_878094302", + "D_543728565", + "D_173101988", + "D_245861186", + "D_420423416", + "INTROSTD", + "D_915230886", + "D_530548878", + "D_469947273", + "D_685735916", + "D_954405492", + "D_103397024", + "D_931470797", + "D_922524563", + "D_978485677", + "D_523188839", + "D_725626004", + "D_846786840", + "D_423547108", + "D_852898339", + "D_467061940", + "D_619481697", + "DEPRESSINTRO", + "D_266847650", + "D_219956652", + "D_852236900", + "INTROSURG", + "D_301414575", + "D_367884741", + "D_178353079", + "D_550075233", + "D_927516732", + "D_552788665", + "D_439736294", + "D_860920332", + "D_986613440", + "D_517307064", + "D_150352141", + "D_122887481", + "D_378892977", + "D_224791140", + "D_518750011", + "D_946504570", + "D_107060069", + "D_527057404", + "D_453252072", + "D_216506024", + "D_477690298", + "D_176453768", + "D_145786416", + "D_287605131", + "D_701157499", + "D_428639167", + "D_282355641", + "D_539301647", + "D_579225381", + "D_891214661", + "D_534007917", + "D_752636038", + "D_275770221", + "D_882152987", + "D_875208305", + "D_795940097", + "D_406011084", + "D_338924834", + "D_746012894", + "D_936904328", + "D_206319592", + "D_283634623", + "D_164752169", + "FAMHISTINTRO", + "D_512167179", + "D_509933065", + "D_967093163", + "D_422714611", + "D_354326265", + "D_276353712", + "D_367374606", + "D_814510313", + "D_259397450", + "D_528753070", + "D_683981980", + "D_402548942", + "D_247198016", + "D_891925519", + "D_317093647", + "D_684692228", + "D_671347092", + "D_875221479", + "D_186170949", + "D_726451917", + "D_213545903", + "D_765903702", + "D_773974223", + "D_433604862", + "D_521369040", + "D_497311092", + "D_625249910", + "D_838564850", + "D_633764113", + "D_882263738", + "D_671308090", + "D_628078826", + "D_178774803", + "D_659784914", + "SIB", + "D_173240848", + "D_345146692", + "D_243443318", + "D_610382315", + "D_135519371", + "D_785019074", + "D_152885579", + "D_692910565", + "D_522464057", + "D_808655074", + "D_659627058", + "D_370198527", + "D_291855684", + "D_413536735", + "D_210325948", + "D_193297280", + "D_121502359", + "D_489402657", + "D_727260639", + "D_359291056", + "D_968841976", + "D_864981804", + "D_499434567", + "D_890637099_1_1", + "D_869387390_1_1", + "D_537137982_1_1", + "D_607773106_1_1", + "_CONTINUE1_1_1", + "D_578895128_1_1", + "D_384881609_1_1", + "D_483975329_1_1", + "D_570279754_1_1", + "D_907590067_1_1", + "D_860112841_1_1", + "D_158354252_1_1", + "D_654594205_1_1", + "D_550722030_1_1", + "D_142912472_1_1", + "D_158409298_1_1", + "D_529744595_1_1", + "D_315987564_1_1", + "D_852278004_1_1", + "D_391972881_1_1", + "D_259089008_1_1", + "D_209771602_1_1", + "D_682651189_1_1", + "D_750994269_1_1", + "D_700889863_1_1", + "D_990114799_1_1", + "D_195363361_1_1", + "D_216840563_1_1", + "D_514034680_1_1", + "D_247160067_1_1", + "D_312545873_1_1", + "D_890637099_2_2", + "D_869387390_2_2", + "D_537137982_2_2", + "D_607773106_2_2", + "_CONTINUE1_2_2", + "D_578895128_2_2", + "D_384881609_2_2", + "D_483975329_2_2", + "D_570279754_2_2", + "D_907590067_2_2", + "D_860112841_2_2", + "D_158354252_2_2", + "D_654594205_2_2", + "D_550722030_2_2", + "D_142912472_2_2", + "D_158409298_2_2", + "D_529744595_2_2", + "D_315987564_2_2", + "D_852278004_2_2", + "D_391972881_2_2", + "D_259089008_2_2", + "D_209771602_2_2", + "D_682651189_2_2", + "D_750994269_2_2", + "D_700889863_2_2", + "D_990114799_2_2", + "D_195363361_2_2", + "D_216840563_2_2", + "D_514034680_2_2", + "D_247160067_2_2", + "D_312545873_2_2", + "D_890637099_3_3", + "D_869387390_3_3", + "D_537137982_3_3", + "D_607773106_3_3", + "_CONTINUE1_3_3", + "D_578895128_3_3", + "D_384881609_3_3", + "D_483975329_3_3", + "D_570279754_3_3", + "D_907590067_3_3", + "D_860112841_3_3", + "D_158354252_3_3", + "D_654594205_3_3", + "D_550722030_3_3", + "D_142912472_3_3", + "D_158409298_3_3", + "D_529744595_3_3", + "D_315987564_3_3", + "D_852278004_3_3", + "D_391972881_3_3", + "D_259089008_3_3", + "D_209771602_3_3", + "D_682651189_3_3", + "D_750994269_3_3", + "D_700889863_3_3", + "D_990114799_3_3", + "D_195363361_3_3", + "D_216840563_3_3", + "D_514034680_3_3", + "D_247160067_3_3", + "D_312545873_3_3", + "D_890637099_4_4", + "D_869387390_4_4", + "D_537137982_4_4", + "D_607773106_4_4", + "_CONTINUE1_4_4", + "D_578895128_4_4", + "D_384881609_4_4", + "D_483975329_4_4", + "D_570279754_4_4", + "D_907590067_4_4", + "D_860112841_4_4", + "D_158354252_4_4", + "D_654594205_4_4", + "D_550722030_4_4", + "D_142912472_4_4", + "D_158409298_4_4", + "D_529744595_4_4", + "D_315987564_4_4", + "D_852278004_4_4", + "D_391972881_4_4", + "D_259089008_4_4", + "D_209771602_4_4", + "D_682651189_4_4", + "D_750994269_4_4", + "D_700889863_4_4", + "D_990114799_4_4", + "D_195363361_4_4", + "D_216840563_4_4", + "D_514034680_4_4", + "D_247160067_4_4", + "D_312545873_4_4", + "D_890637099_5_5", + "D_869387390_5_5", + "D_537137982_5_5", + "D_607773106_5_5", + "_CONTINUE1_5_5", + "D_578895128_5_5", + "D_384881609_5_5", + "D_483975329_5_5", + "D_570279754_5_5", + "D_907590067_5_5", + "D_860112841_5_5", + "D_158354252_5_5", + "D_654594205_5_5", + "D_550722030_5_5", + "D_142912472_5_5", + "D_158409298_5_5", + "D_529744595_5_5", + "D_315987564_5_5", + "D_852278004_5_5", + "D_391972881_5_5", + "D_259089008_5_5", + "D_209771602_5_5", + "D_682651189_5_5", + "D_750994269_5_5", + "D_700889863_5_5", + "D_990114799_5_5", + "D_195363361_5_5", + "D_216840563_5_5", + "D_514034680_5_5", + "D_247160067_5_5", + "D_312545873_5_5", + "D_890637099_6_6", + "D_869387390_6_6", + "D_537137982_6_6", + "D_607773106_6_6", + "_CONTINUE1_6_6", + "D_578895128_6_6", + "D_384881609_6_6", + "D_483975329_6_6", + "D_570279754_6_6", + "D_907590067_6_6", + "D_860112841_6_6", + "D_158354252_6_6", + "D_654594205_6_6", + "D_550722030_6_6", + "D_142912472_6_6", + "D_158409298_6_6", + "D_529744595_6_6", + "D_315987564_6_6", + "D_852278004_6_6", + "D_391972881_6_6", + "D_259089008_6_6", + "D_209771602_6_6", + "D_682651189_6_6", + "D_750994269_6_6", + "D_700889863_6_6", + "D_990114799_6_6", + "D_195363361_6_6", + "D_216840563_6_6", + "D_514034680_6_6", + "D_247160067_6_6", + "D_312545873_6_6", + "D_890637099_7_7", + "D_869387390_7_7", + "D_537137982_7_7", + "D_607773106_7_7", + "_CONTINUE1_7_7", + "D_578895128_7_7", + "D_384881609_7_7", + "D_483975329_7_7", + "D_570279754_7_7", + "D_907590067_7_7", + "D_860112841_7_7", + "D_158354252_7_7", + "D_654594205_7_7", + "D_550722030_7_7", + "D_142912472_7_7", + "D_158409298_7_7", + "D_529744595_7_7", + "D_315987564_7_7", + "D_852278004_7_7", + "D_391972881_7_7", + "D_259089008_7_7", + "D_209771602_7_7", + "D_682651189_7_7", + "D_750994269_7_7", + "D_700889863_7_7", + "D_990114799_7_7", + "D_195363361_7_7", + "D_216840563_7_7", + "D_514034680_7_7", + "D_247160067_7_7", + "D_312545873_7_7", + "D_890637099_8_8", + "D_869387390_8_8", + "D_537137982_8_8", + "D_607773106_8_8", + "_CONTINUE1_8_8", + "D_578895128_8_8", + "D_384881609_8_8", + "D_483975329_8_8", + "D_570279754_8_8", + "D_907590067_8_8", + "D_860112841_8_8", + "D_158354252_8_8", + "D_654594205_8_8", + "D_550722030_8_8", + "D_142912472_8_8", + "D_158409298_8_8", + "D_529744595_8_8", + "D_315987564_8_8", + "D_852278004_8_8", + "D_391972881_8_8", + "D_259089008_8_8", + "D_209771602_8_8", + "D_682651189_8_8", + "D_750994269_8_8", + "D_700889863_8_8", + "D_990114799_8_8", + "D_195363361_8_8", + "D_216840563_8_8", + "D_514034680_8_8", + "D_247160067_8_8", + "D_312545873_8_8", + "D_890637099_9_9", + "D_869387390_9_9", + "D_537137982_9_9", + "D_607773106_9_9", + "_CONTINUE1_9_9", + "D_578895128_9_9", + "D_384881609_9_9", + "D_483975329_9_9", + "D_570279754_9_9", + "D_907590067_9_9", + "D_860112841_9_9", + "D_158354252_9_9", + "D_654594205_9_9", + "D_550722030_9_9", + "D_142912472_9_9", + "D_158409298_9_9", + "D_529744595_9_9", + "D_315987564_9_9", + "D_852278004_9_9", + "D_391972881_9_9", + "D_259089008_9_9", + "D_209771602_9_9", + "D_682651189_9_9", + "D_750994269_9_9", + "D_700889863_9_9", + "D_990114799_9_9", + "D_195363361_9_9", + "D_216840563_9_9", + "D_514034680_9_9", + "D_247160067_9_9", + "D_312545873_9_9", + "D_890637099_10_10", + "D_869387390_10_10", + "D_537137982_10_10", + "D_607773106_10_10", + "_CONTINUE1_10_10", + "D_578895128_10_10", + "D_384881609_10_10", + "D_483975329_10_10", + "D_570279754_10_10", + "D_907590067_10_10", + "D_860112841_10_10", + "D_158354252_10_10", + "D_654594205_10_10", + "D_550722030_10_10", + "D_142912472_10_10", + "D_158409298_10_10", + "D_529744595_10_10", + "D_315987564_10_10", + "D_852278004_10_10", + "D_391972881_10_10", + "D_259089008_10_10", + "D_209771602_10_10", + "D_682651189_10_10", + "D_750994269_10_10", + "D_700889863_10_10", + "D_990114799_10_10", + "D_195363361_10_10", + "D_216840563_10_10", + "D_514034680_10_10", + "D_247160067_10_10", + "D_312545873_10_10", + "D_890637099_11_11", + "D_869387390_11_11", + "D_537137982_11_11", + "D_607773106_11_11", + "_CONTINUE1_11_11", + "D_578895128_11_11", + "D_384881609_11_11", + "D_483975329_11_11", + "D_570279754_11_11", + "D_907590067_11_11", + "D_860112841_11_11", + "D_158354252_11_11", + "D_654594205_11_11", + "D_550722030_11_11", + "D_142912472_11_11", + "D_158409298_11_11", + "D_529744595_11_11", + "D_315987564_11_11", + "D_852278004_11_11", + "D_391972881_11_11", + "D_259089008_11_11", + "D_209771602_11_11", + "D_682651189_11_11", + "D_750994269_11_11", + "D_700889863_11_11", + "D_990114799_11_11", + "D_195363361_11_11", + "D_216840563_11_11", + "D_514034680_11_11", + "D_247160067_11_11", + "D_312545873_11_11", + "D_890637099_12_12", + "D_869387390_12_12", + "D_537137982_12_12", + "D_607773106_12_12", + "_CONTINUE1_12_12", + "D_578895128_12_12", + "D_384881609_12_12", + "D_483975329_12_12", + "D_570279754_12_12", + "D_907590067_12_12", + "D_860112841_12_12", + "D_158354252_12_12", + "D_654594205_12_12", + "D_550722030_12_12", + "D_142912472_12_12", + "D_158409298_12_12", + "D_529744595_12_12", + "D_315987564_12_12", + "D_852278004_12_12", + "D_391972881_12_12", + "D_259089008_12_12", + "D_209771602_12_12", + "D_682651189_12_12", + "D_750994269_12_12", + "D_700889863_12_12", + "D_990114799_12_12", + "D_195363361_12_12", + "D_216840563_12_12", + "D_514034680_12_12", + "D_247160067_12_12", + "D_312545873_12_12", + "D_890637099_13_13", + "D_869387390_13_13", + "D_537137982_13_13", + "D_607773106_13_13", + "_CONTINUE1_13_13", + "D_578895128_13_13", + "D_384881609_13_13", + "D_483975329_13_13", + "D_570279754_13_13", + "D_907590067_13_13", + "D_860112841_13_13", + "D_158354252_13_13", + "D_654594205_13_13", + "D_550722030_13_13", + "D_142912472_13_13", + "D_158409298_13_13", + "D_529744595_13_13", + "D_315987564_13_13", + "D_852278004_13_13", + "D_391972881_13_13", + "D_259089008_13_13", + "D_209771602_13_13", + "D_682651189_13_13", + "D_750994269_13_13", + "D_700889863_13_13", + "D_990114799_13_13", + "D_195363361_13_13", + "D_216840563_13_13", + "D_514034680_13_13", + "D_247160067_13_13", + "D_312545873_13_13", + "D_890637099_14_14", + "D_869387390_14_14", + "D_537137982_14_14", + "D_607773106_14_14", + "_CONTINUE1_14_14", + "D_578895128_14_14", + "D_384881609_14_14", + "D_483975329_14_14", + "D_570279754_14_14", + "D_907590067_14_14", + "D_860112841_14_14", + "D_158354252_14_14", + "D_654594205_14_14", + "D_550722030_14_14", + "D_142912472_14_14", + "D_158409298_14_14", + "D_529744595_14_14", + "D_315987564_14_14", + "D_852278004_14_14", + "D_391972881_14_14", + "D_259089008_14_14", + "D_209771602_14_14", + "D_682651189_14_14", + "D_750994269_14_14", + "D_700889863_14_14", + "D_990114799_14_14", + "D_195363361_14_14", + "D_216840563_14_14", + "D_514034680_14_14", + "D_247160067_14_14", + "D_312545873_14_14", + "D_890637099_15_15", + "D_869387390_15_15", + "D_537137982_15_15", + "D_607773106_15_15", + "_CONTINUE1_15_15", + "D_578895128_15_15", + "D_384881609_15_15", + "D_483975329_15_15", + "D_570279754_15_15", + "D_907590067_15_15", + "D_860112841_15_15", + "D_158354252_15_15", + "D_654594205_15_15", + "D_550722030_15_15", + "D_142912472_15_15", + "D_158409298_15_15", + "D_529744595_15_15", + "D_315987564_15_15", + "D_852278004_15_15", + "D_391972881_15_15", + "D_259089008_15_15", + "D_209771602_15_15", + "D_682651189_15_15", + "D_750994269_15_15", + "D_700889863_15_15", + "D_990114799_15_15", + "D_195363361_15_15", + "D_216840563_15_15", + "D_514034680_15_15", + "D_247160067_15_15", + "D_312545873_15_15", + "D_890637099_16_16", + "D_869387390_16_16", + "D_537137982_16_16", + "D_607773106_16_16", + "_CONTINUE1_16_16", + "D_578895128_16_16", + "D_384881609_16_16", + "D_483975329_16_16", + "D_570279754_16_16", + "D_907590067_16_16", + "D_860112841_16_16", + "D_158354252_16_16", + "D_654594205_16_16", + "D_550722030_16_16", + "D_142912472_16_16", + "D_158409298_16_16", + "D_529744595_16_16", + "D_315987564_16_16", + "D_852278004_16_16", + "D_391972881_16_16", + "D_259089008_16_16", + "D_209771602_16_16", + "D_682651189_16_16", + "D_750994269_16_16", + "D_700889863_16_16", + "D_990114799_16_16", + "D_195363361_16_16", + "D_216840563_16_16", + "D_514034680_16_16", + "D_247160067_16_16", + "D_312545873_16_16", + "D_890637099_17_17", + "D_869387390_17_17", + "D_537137982_17_17", + "D_607773106_17_17", + "_CONTINUE1_17_17", + "D_578895128_17_17", + "D_384881609_17_17", + "D_483975329_17_17", + "D_570279754_17_17", + "D_907590067_17_17", + "D_860112841_17_17", + "D_158354252_17_17", + "D_654594205_17_17", + "D_550722030_17_17", + "D_142912472_17_17", + "D_158409298_17_17", + "D_529744595_17_17", + "D_315987564_17_17", + "D_852278004_17_17", + "D_391972881_17_17", + "D_259089008_17_17", + "D_209771602_17_17", + "D_682651189_17_17", + "D_750994269_17_17", + "D_700889863_17_17", + "D_990114799_17_17", + "D_195363361_17_17", + "D_216840563_17_17", + "D_514034680_17_17", + "D_247160067_17_17", + "D_312545873_17_17", + "D_890637099_18_18", + "D_869387390_18_18", + "D_537137982_18_18", + "D_607773106_18_18", + "_CONTINUE1_18_18", + "D_578895128_18_18", + "D_384881609_18_18", + "D_483975329_18_18", + "D_570279754_18_18", + "D_907590067_18_18", + "D_860112841_18_18", + "D_158354252_18_18", + "D_654594205_18_18", + "D_550722030_18_18", + "D_142912472_18_18", + "D_158409298_18_18", + "D_529744595_18_18", + "D_315987564_18_18", + "D_852278004_18_18", + "D_391972881_18_18", + "D_259089008_18_18", + "D_209771602_18_18", + "D_682651189_18_18", + "D_750994269_18_18", + "D_700889863_18_18", + "D_990114799_18_18", + "D_195363361_18_18", + "D_216840563_18_18", + "D_514034680_18_18", + "D_247160067_18_18", + "D_312545873_18_18", + "D_890637099_19_19", + "D_869387390_19_19", + "D_537137982_19_19", + "D_607773106_19_19", + "_CONTINUE1_19_19", + "D_578895128_19_19", + "D_384881609_19_19", + "D_483975329_19_19", + "D_570279754_19_19", + "D_907590067_19_19", + "D_860112841_19_19", + "D_158354252_19_19", + "D_654594205_19_19", + "D_550722030_19_19", + "D_142912472_19_19", + "D_158409298_19_19", + "D_529744595_19_19", + "D_315987564_19_19", + "D_852278004_19_19", + "D_391972881_19_19", + "D_259089008_19_19", + "D_209771602_19_19", + "D_682651189_19_19", + "D_750994269_19_19", + "D_700889863_19_19", + "D_990114799_19_19", + "D_195363361_19_19", + "D_216840563_19_19", + "D_514034680_19_19", + "D_247160067_19_19", + "D_312545873_19_19", + "D_890637099_20_20", + "D_869387390_20_20", + "D_537137982_20_20", + "D_607773106_20_20", + "_CONTINUE1_20_20", + "D_578895128_20_20", + "D_384881609_20_20", + "D_483975329_20_20", + "D_570279754_20_20", + "D_907590067_20_20", + "D_860112841_20_20", + "D_158354252_20_20", + "D_654594205_20_20", + "D_550722030_20_20", + "D_142912472_20_20", + "D_158409298_20_20", + "D_529744595_20_20", + "D_315987564_20_20", + "D_852278004_20_20", + "D_391972881_20_20", + "D_259089008_20_20", + "D_209771602_20_20", + "D_682651189_20_20", + "D_750994269_20_20", + "D_700889863_20_20", + "D_990114799_20_20", + "D_195363361_20_20", + "D_216840563_20_20", + "D_514034680_20_20", + "D_247160067_20_20", + "D_312545873_20_20", + "D_890637099_21_21", + "D_869387390_21_21", + "D_537137982_21_21", + "D_607773106_21_21", + "_CONTINUE1_21_21", + "D_578895128_21_21", + "D_384881609_21_21", + "D_483975329_21_21", + "D_570279754_21_21", + "D_907590067_21_21", + "D_860112841_21_21", + "D_158354252_21_21", + "D_654594205_21_21", + "D_550722030_21_21", + "D_142912472_21_21", + "D_158409298_21_21", + "D_529744595_21_21", + "D_315987564_21_21", + "D_852278004_21_21", + "D_391972881_21_21", + "D_259089008_21_21", + "D_209771602_21_21", + "D_682651189_21_21", + "D_750994269_21_21", + "D_700889863_21_21", + "D_990114799_21_21", + "D_195363361_21_21", + "D_216840563_21_21", + "D_514034680_21_21", + "D_247160067_21_21", + "D_312545873_21_21", + "D_890637099_22_22", + "D_869387390_22_22", + "D_537137982_22_22", + "D_607773106_22_22", + "_CONTINUE1_22_22", + "D_578895128_22_22", + "D_384881609_22_22", + "D_483975329_22_22", + "D_570279754_22_22", + "D_907590067_22_22", + "D_860112841_22_22", + "D_158354252_22_22", + "D_654594205_22_22", + "D_550722030_22_22", + "D_142912472_22_22", + "D_158409298_22_22", + "D_529744595_22_22", + "D_315987564_22_22", + "D_852278004_22_22", + "D_391972881_22_22", + "D_259089008_22_22", + "D_209771602_22_22", + "D_682651189_22_22", + "D_750994269_22_22", + "D_700889863_22_22", + "D_990114799_22_22", + "D_195363361_22_22", + "D_216840563_22_22", + "D_514034680_22_22", + "D_247160067_22_22", + "D_312545873_22_22", + "D_890637099_23_23", + "D_869387390_23_23", + "D_537137982_23_23", + "D_607773106_23_23", + "_CONTINUE1_23_23", + "D_578895128_23_23", + "D_384881609_23_23", + "D_483975329_23_23", + "D_570279754_23_23", + "D_907590067_23_23", + "D_860112841_23_23", + "D_158354252_23_23", + "D_654594205_23_23", + "D_550722030_23_23", + "D_142912472_23_23", + "D_158409298_23_23", + "D_529744595_23_23", + "D_315987564_23_23", + "D_852278004_23_23", + "D_391972881_23_23", + "D_259089008_23_23", + "D_209771602_23_23", + "D_682651189_23_23", + "D_750994269_23_23", + "D_700889863_23_23", + "D_990114799_23_23", + "D_195363361_23_23", + "D_216840563_23_23", + "D_514034680_23_23", + "D_247160067_23_23", + "D_312545873_23_23", + "D_890637099_24_24", + "D_869387390_24_24", + "D_537137982_24_24", + "D_607773106_24_24", + "_CONTINUE1_24_24", + "D_578895128_24_24", + "D_384881609_24_24", + "D_483975329_24_24", + "D_570279754_24_24", + "D_907590067_24_24", + "D_860112841_24_24", + "D_158354252_24_24", + "D_654594205_24_24", + "D_550722030_24_24", + "D_142912472_24_24", + "D_158409298_24_24", + "D_529744595_24_24", + "D_315987564_24_24", + "D_852278004_24_24", + "D_391972881_24_24", + "D_259089008_24_24", + "D_209771602_24_24", + "D_682651189_24_24", + "D_750994269_24_24", + "D_700889863_24_24", + "D_990114799_24_24", + "D_195363361_24_24", + "D_216840563_24_24", + "D_514034680_24_24", + "D_247160067_24_24", + "D_312545873_24_24", + "D_890637099_25_25", + "D_869387390_25_25", + "D_537137982_25_25", + "D_607773106_25_25", + "_CONTINUE1_25_25", + "D_578895128_25_25", + "D_384881609_25_25", + "D_483975329_25_25", + "D_570279754_25_25", + "D_907590067_25_25", + "D_860112841_25_25", + "D_158354252_25_25", + "D_654594205_25_25", + "D_550722030_25_25", + "D_142912472_25_25", + "D_158409298_25_25", + "D_529744595_25_25", + "D_315987564_25_25", + "D_852278004_25_25", + "D_391972881_25_25", + "D_259089008_25_25", + "D_209771602_25_25", + "D_682651189_25_25", + "D_750994269_25_25", + "D_700889863_25_25", + "D_990114799_25_25", + "D_195363361_25_25", + "D_216840563_25_25", + "D_514034680_25_25", + "D_247160067_25_25", + "D_312545873_25_25", + "D_640010727_1_1", + "D_236590500_1_1", + "D_718867914_1_1", + "_CONTINUE2_1_1", + "D_812370563_1_1", + "D_900939817_1_1", + "D_938150507_1_1", + "D_601211723_1_1", + "D_861788020_1_1", + "D_204425387_1_1", + "D_558929585_1_1", + "D_233764880_1_1", + "D_905145893_1_1", + "D_473190270_1_1", + "D_483735587_1_1", + "D_331759900_1_1", + "D_513077276_1_1", + "D_519974530_1_1", + "D_907776050_1_1", + "D_271684775_1_1", + "D_252160589_1_1", + "D_774774759_1_1", + "D_127257956_1_1", + "D_496917282_1_1", + "D_908129316_1_1", + "D_795003496_1_1", + "D_969177591_1_1", + "D_116065851_1_1", + "D_278159347_1_1", + "D_845219872_1_1", + "D_640010727_2_2", + "D_236590500_2_2", + "D_718867914_2_2", + "_CONTINUE2_2_2", + "D_812370563_2_2", + "D_900939817_2_2", + "D_938150507_2_2", + "D_601211723_2_2", + "D_861788020_2_2", + "D_204425387_2_2", + "D_558929585_2_2", + "D_233764880_2_2", + "D_905145893_2_2", + "D_473190270_2_2", + "D_483735587_2_2", + "D_331759900_2_2", + "D_513077276_2_2", + "D_519974530_2_2", + "D_907776050_2_2", + "D_271684775_2_2", + "D_252160589_2_2", + "D_774774759_2_2", + "D_127257956_2_2", + "D_496917282_2_2", + "D_908129316_2_2", + "D_795003496_2_2", + "D_969177591_2_2", + "D_116065851_2_2", + "D_278159347_2_2", + "D_845219872_2_2", + "D_640010727_3_3", + "D_236590500_3_3", + "D_718867914_3_3", + "_CONTINUE2_3_3", + "D_812370563_3_3", + "D_900939817_3_3", + "D_938150507_3_3", + "D_601211723_3_3", + "D_861788020_3_3", + "D_204425387_3_3", + "D_558929585_3_3", + "D_233764880_3_3", + "D_905145893_3_3", + "D_473190270_3_3", + "D_483735587_3_3", + "D_331759900_3_3", + "D_513077276_3_3", + "D_519974530_3_3", + "D_907776050_3_3", + "D_271684775_3_3", + "D_252160589_3_3", + "D_774774759_3_3", + "D_127257956_3_3", + "D_496917282_3_3", + "D_908129316_3_3", + "D_795003496_3_3", + "D_969177591_3_3", + "D_116065851_3_3", + "D_278159347_3_3", + "D_845219872_3_3", + "D_640010727_4_4", + "D_236590500_4_4", + "D_718867914_4_4", + "_CONTINUE2_4_4", + "D_812370563_4_4", + "D_900939817_4_4", + "D_938150507_4_4", + "D_601211723_4_4", + "D_861788020_4_4", + "D_204425387_4_4", + "D_558929585_4_4", + "D_233764880_4_4", + "D_905145893_4_4", + "D_473190270_4_4", + "D_483735587_4_4", + "D_331759900_4_4", + "D_513077276_4_4", + "D_519974530_4_4", + "D_907776050_4_4", + "D_271684775_4_4", + "D_252160589_4_4", + "D_774774759_4_4", + "D_127257956_4_4", + "D_496917282_4_4", + "D_908129316_4_4", + "D_795003496_4_4", + "D_969177591_4_4", + "D_116065851_4_4", + "D_278159347_4_4", + "D_845219872_4_4", + "D_640010727_5_5", + "D_236590500_5_5", + "D_718867914_5_5", + "_CONTINUE2_5_5", + "D_812370563_5_5", + "D_900939817_5_5", + "D_938150507_5_5", + "D_601211723_5_5", + "D_861788020_5_5", + "D_204425387_5_5", + "D_558929585_5_5", + "D_233764880_5_5", + "D_905145893_5_5", + "D_473190270_5_5", + "D_483735587_5_5", + "D_331759900_5_5", + "D_513077276_5_5", + "D_519974530_5_5", + "D_907776050_5_5", + "D_271684775_5_5", + "D_252160589_5_5", + "D_774774759_5_5", + "D_127257956_5_5", + "D_496917282_5_5", + "D_908129316_5_5", + "D_795003496_5_5", + "D_969177591_5_5", + "D_116065851_5_5", + "D_278159347_5_5", + "D_845219872_5_5", + "D_640010727_6_6", + "D_236590500_6_6", + "D_718867914_6_6", + "_CONTINUE2_6_6", + "D_812370563_6_6", + "D_900939817_6_6", + "D_938150507_6_6", + "D_601211723_6_6", + "D_861788020_6_6", + "D_204425387_6_6", + "D_558929585_6_6", + "D_233764880_6_6", + "D_905145893_6_6", + "D_473190270_6_6", + "D_483735587_6_6", + "D_331759900_6_6", + "D_513077276_6_6", + "D_519974530_6_6", + "D_907776050_6_6", + "D_271684775_6_6", + "D_252160589_6_6", + "D_774774759_6_6", + "D_127257956_6_6", + "D_496917282_6_6", + "D_908129316_6_6", + "D_795003496_6_6", + "D_969177591_6_6", + "D_116065851_6_6", + "D_278159347_6_6", + "D_845219872_6_6", + "D_640010727_7_7", + "D_236590500_7_7", + "D_718867914_7_7", + "_CONTINUE2_7_7", + "D_812370563_7_7", + "D_900939817_7_7", + "D_938150507_7_7", + "D_601211723_7_7", + "D_861788020_7_7", + "D_204425387_7_7", + "D_558929585_7_7", + "D_233764880_7_7", + "D_905145893_7_7", + "D_473190270_7_7", + "D_483735587_7_7", + "D_331759900_7_7", + "D_513077276_7_7", + "D_519974530_7_7", + "D_907776050_7_7", + "D_271684775_7_7", + "D_252160589_7_7", + "D_774774759_7_7", + "D_127257956_7_7", + "D_496917282_7_7", + "D_908129316_7_7", + "D_795003496_7_7", + "D_969177591_7_7", + "D_116065851_7_7", + "D_278159347_7_7", + "D_845219872_7_7", + "D_640010727_8_8", + "D_236590500_8_8", + "D_718867914_8_8", + "_CONTINUE2_8_8", + "D_812370563_8_8", + "D_900939817_8_8", + "D_938150507_8_8", + "D_601211723_8_8", + "D_861788020_8_8", + "D_204425387_8_8", + "D_558929585_8_8", + "D_233764880_8_8", + "D_905145893_8_8", + "D_473190270_8_8", + "D_483735587_8_8", + "D_331759900_8_8", + "D_513077276_8_8", + "D_519974530_8_8", + "D_907776050_8_8", + "D_271684775_8_8", + "D_252160589_8_8", + "D_774774759_8_8", + "D_127257956_8_8", + "D_496917282_8_8", + "D_908129316_8_8", + "D_795003496_8_8", + "D_969177591_8_8", + "D_116065851_8_8", + "D_278159347_8_8", + "D_845219872_8_8", + "D_640010727_9_9", + "D_236590500_9_9", + "D_718867914_9_9", + "_CONTINUE2_9_9", + "D_812370563_9_9", + "D_900939817_9_9", + "D_938150507_9_9", + "D_601211723_9_9", + "D_861788020_9_9", + "D_204425387_9_9", + "D_558929585_9_9", + "D_233764880_9_9", + "D_905145893_9_9", + "D_473190270_9_9", + "D_483735587_9_9", + "D_331759900_9_9", + "D_513077276_9_9", + "D_519974530_9_9", + "D_907776050_9_9", + "D_271684775_9_9", + "D_252160589_9_9", + "D_774774759_9_9", + "D_127257956_9_9", + "D_496917282_9_9", + "D_908129316_9_9", + "D_795003496_9_9", + "D_969177591_9_9", + "D_116065851_9_9", + "D_278159347_9_9", + "D_845219872_9_9", + "D_640010727_10_10", + "D_236590500_10_10", + "D_718867914_10_10", + "_CONTINUE2_10_10", + "D_812370563_10_10", + "D_900939817_10_10", + "D_938150507_10_10", + "D_601211723_10_10", + "D_861788020_10_10", + "D_204425387_10_10", + "D_558929585_10_10", + "D_233764880_10_10", + "D_905145893_10_10", + "D_473190270_10_10", + "D_483735587_10_10", + "D_331759900_10_10", + "D_513077276_10_10", + "D_519974530_10_10", + "D_907776050_10_10", + "D_271684775_10_10", + "D_252160589_10_10", + "D_774774759_10_10", + "D_127257956_10_10", + "D_496917282_10_10", + "D_908129316_10_10", + "D_795003496_10_10", + "D_969177591_10_10", + "D_116065851_10_10", + "D_278159347_10_10", + "D_845219872_10_10", + "D_640010727_11_11", + "D_236590500_11_11", + "D_718867914_11_11", + "_CONTINUE2_11_11", + "D_812370563_11_11", + "D_900939817_11_11", + "D_938150507_11_11", + "D_601211723_11_11", + "D_861788020_11_11", + "D_204425387_11_11", + "D_558929585_11_11", + "D_233764880_11_11", + "D_905145893_11_11", + "D_473190270_11_11", + "D_483735587_11_11", + "D_331759900_11_11", + "D_513077276_11_11", + "D_519974530_11_11", + "D_907776050_11_11", + "D_271684775_11_11", + "D_252160589_11_11", + "D_774774759_11_11", + "D_127257956_11_11", + "D_496917282_11_11", + "D_908129316_11_11", + "D_795003496_11_11", + "D_969177591_11_11", + "D_116065851_11_11", + "D_278159347_11_11", + "D_845219872_11_11", + "D_640010727_12_12", + "D_236590500_12_12", + "D_718867914_12_12", + "_CONTINUE2_12_12", + "D_812370563_12_12", + "D_900939817_12_12", + "D_938150507_12_12", + "D_601211723_12_12", + "D_861788020_12_12", + "D_204425387_12_12", + "D_558929585_12_12", + "D_233764880_12_12", + "D_905145893_12_12", + "D_473190270_12_12", + "D_483735587_12_12", + "D_331759900_12_12", + "D_513077276_12_12", + "D_519974530_12_12", + "D_907776050_12_12", + "D_271684775_12_12", + "D_252160589_12_12", + "D_774774759_12_12", + "D_127257956_12_12", + "D_496917282_12_12", + "D_908129316_12_12", + "D_795003496_12_12", + "D_969177591_12_12", + "D_116065851_12_12", + "D_278159347_12_12", + "D_845219872_12_12", + "D_640010727_13_13", + "D_236590500_13_13", + "D_718867914_13_13", + "_CONTINUE2_13_13", + "D_812370563_13_13", + "D_900939817_13_13", + "D_938150507_13_13", + "D_601211723_13_13", + "D_861788020_13_13", + "D_204425387_13_13", + "D_558929585_13_13", + "D_233764880_13_13", + "D_905145893_13_13", + "D_473190270_13_13", + "D_483735587_13_13", + "D_331759900_13_13", + "D_513077276_13_13", + "D_519974530_13_13", + "D_907776050_13_13", + "D_271684775_13_13", + "D_252160589_13_13", + "D_774774759_13_13", + "D_127257956_13_13", + "D_496917282_13_13", + "D_908129316_13_13", + "D_795003496_13_13", + "D_969177591_13_13", + "D_116065851_13_13", + "D_278159347_13_13", + "D_845219872_13_13", + "D_640010727_14_14", + "D_236590500_14_14", + "D_718867914_14_14", + "_CONTINUE2_14_14", + "D_812370563_14_14", + "D_900939817_14_14", + "D_938150507_14_14", + "D_601211723_14_14", + "D_861788020_14_14", + "D_204425387_14_14", + "D_558929585_14_14", + "D_233764880_14_14", + "D_905145893_14_14", + "D_473190270_14_14", + "D_483735587_14_14", + "D_331759900_14_14", + "D_513077276_14_14", + "D_519974530_14_14", + "D_907776050_14_14", + "D_271684775_14_14", + "D_252160589_14_14", + "D_774774759_14_14", + "D_127257956_14_14", + "D_496917282_14_14", + "D_908129316_14_14", + "D_795003496_14_14", + "D_969177591_14_14", + "D_116065851_14_14", + "D_278159347_14_14", + "D_845219872_14_14", + "D_640010727_15_15", + "D_236590500_15_15", + "D_718867914_15_15", + "_CONTINUE2_15_15", + "D_812370563_15_15", + "D_900939817_15_15", + "D_938150507_15_15", + "D_601211723_15_15", + "D_861788020_15_15", + "D_204425387_15_15", + "D_558929585_15_15", + "D_233764880_15_15", + "D_905145893_15_15", + "D_473190270_15_15", + "D_483735587_15_15", + "D_331759900_15_15", + "D_513077276_15_15", + "D_519974530_15_15", + "D_907776050_15_15", + "D_271684775_15_15", + "D_252160589_15_15", + "D_774774759_15_15", + "D_127257956_15_15", + "D_496917282_15_15", + "D_908129316_15_15", + "D_795003496_15_15", + "D_969177591_15_15", + "D_116065851_15_15", + "D_278159347_15_15", + "D_845219872_15_15", + "D_640010727_16_16", + "D_236590500_16_16", + "D_718867914_16_16", + "_CONTINUE2_16_16", + "D_812370563_16_16", + "D_900939817_16_16", + "D_938150507_16_16", + "D_601211723_16_16", + "D_861788020_16_16", + "D_204425387_16_16", + "D_558929585_16_16", + "D_233764880_16_16", + "D_905145893_16_16", + "D_473190270_16_16", + "D_483735587_16_16", + "D_331759900_16_16", + "D_513077276_16_16", + "D_519974530_16_16", + "D_907776050_16_16", + "D_271684775_16_16", + "D_252160589_16_16", + "D_774774759_16_16", + "D_127257956_16_16", + "D_496917282_16_16", + "D_908129316_16_16", + "D_795003496_16_16", + "D_969177591_16_16", + "D_116065851_16_16", + "D_278159347_16_16", + "D_845219872_16_16", + "D_640010727_17_17", + "D_236590500_17_17", + "D_718867914_17_17", + "_CONTINUE2_17_17", + "D_812370563_17_17", + "D_900939817_17_17", + "D_938150507_17_17", + "D_601211723_17_17", + "D_861788020_17_17", + "D_204425387_17_17", + "D_558929585_17_17", + "D_233764880_17_17", + "D_905145893_17_17", + "D_473190270_17_17", + "D_483735587_17_17", + "D_331759900_17_17", + "D_513077276_17_17", + "D_519974530_17_17", + "D_907776050_17_17", + "D_271684775_17_17", + "D_252160589_17_17", + "D_774774759_17_17", + "D_127257956_17_17", + "D_496917282_17_17", + "D_908129316_17_17", + "D_795003496_17_17", + "D_969177591_17_17", + "D_116065851_17_17", + "D_278159347_17_17", + "D_845219872_17_17", + "D_640010727_18_18", + "D_236590500_18_18", + "D_718867914_18_18", + "_CONTINUE2_18_18", + "D_812370563_18_18", + "D_900939817_18_18", + "D_938150507_18_18", + "D_601211723_18_18", + "D_861788020_18_18", + "D_204425387_18_18", + "D_558929585_18_18", + "D_233764880_18_18", + "D_905145893_18_18", + "D_473190270_18_18", + "D_483735587_18_18", + "D_331759900_18_18", + "D_513077276_18_18", + "D_519974530_18_18", + "D_907776050_18_18", + "D_271684775_18_18", + "D_252160589_18_18", + "D_774774759_18_18", + "D_127257956_18_18", + "D_496917282_18_18", + "D_908129316_18_18", + "D_795003496_18_18", + "D_969177591_18_18", + "D_116065851_18_18", + "D_278159347_18_18", + "D_845219872_18_18", + "D_640010727_19_19", + "D_236590500_19_19", + "D_718867914_19_19", + "_CONTINUE2_19_19", + "D_812370563_19_19", + "D_900939817_19_19", + "D_938150507_19_19", + "D_601211723_19_19", + "D_861788020_19_19", + "D_204425387_19_19", + "D_558929585_19_19", + "D_233764880_19_19", + "D_905145893_19_19", + "D_473190270_19_19", + "D_483735587_19_19", + "D_331759900_19_19", + "D_513077276_19_19", + "D_519974530_19_19", + "D_907776050_19_19", + "D_271684775_19_19", + "D_252160589_19_19", + "D_774774759_19_19", + "D_127257956_19_19", + "D_496917282_19_19", + "D_908129316_19_19", + "D_795003496_19_19", + "D_969177591_19_19", + "D_116065851_19_19", + "D_278159347_19_19", + "D_845219872_19_19", + "D_640010727_20_20", + "D_236590500_20_20", + "D_718867914_20_20", + "_CONTINUE2_20_20", + "D_812370563_20_20", + "D_900939817_20_20", + "D_938150507_20_20", + "D_601211723_20_20", + "D_861788020_20_20", + "D_204425387_20_20", + "D_558929585_20_20", + "D_233764880_20_20", + "D_905145893_20_20", + "D_473190270_20_20", + "D_483735587_20_20", + "D_331759900_20_20", + "D_513077276_20_20", + "D_519974530_20_20", + "D_907776050_20_20", + "D_271684775_20_20", + "D_252160589_20_20", + "D_774774759_20_20", + "D_127257956_20_20", + "D_496917282_20_20", + "D_908129316_20_20", + "D_795003496_20_20", + "D_969177591_20_20", + "D_116065851_20_20", + "D_278159347_20_20", + "D_845219872_20_20", + "D_640010727_21_21", + "D_236590500_21_21", + "D_718867914_21_21", + "_CONTINUE2_21_21", + "D_812370563_21_21", + "D_900939817_21_21", + "D_938150507_21_21", + "D_601211723_21_21", + "D_861788020_21_21", + "D_204425387_21_21", + "D_558929585_21_21", + "D_233764880_21_21", + "D_905145893_21_21", + "D_473190270_21_21", + "D_483735587_21_21", + "D_331759900_21_21", + "D_513077276_21_21", + "D_519974530_21_21", + "D_907776050_21_21", + "D_271684775_21_21", + "D_252160589_21_21", + "D_774774759_21_21", + "D_127257956_21_21", + "D_496917282_21_21", + "D_908129316_21_21", + "D_795003496_21_21", + "D_969177591_21_21", + "D_116065851_21_21", + "D_278159347_21_21", + "D_845219872_21_21", + "D_640010727_22_22", + "D_236590500_22_22", + "D_718867914_22_22", + "_CONTINUE2_22_22", + "D_812370563_22_22", + "D_900939817_22_22", + "D_938150507_22_22", + "D_601211723_22_22", + "D_861788020_22_22", + "D_204425387_22_22", + "D_558929585_22_22", + "D_233764880_22_22", + "D_905145893_22_22", + "D_473190270_22_22", + "D_483735587_22_22", + "D_331759900_22_22", + "D_513077276_22_22", + "D_519974530_22_22", + "D_907776050_22_22", + "D_271684775_22_22", + "D_252160589_22_22", + "D_774774759_22_22", + "D_127257956_22_22", + "D_496917282_22_22", + "D_908129316_22_22", + "D_795003496_22_22", + "D_969177591_22_22", + "D_116065851_22_22", + "D_278159347_22_22", + "D_845219872_22_22", + "D_640010727_23_23", + "D_236590500_23_23", + "D_718867914_23_23", + "_CONTINUE2_23_23", + "D_812370563_23_23", + "D_900939817_23_23", + "D_938150507_23_23", + "D_601211723_23_23", + "D_861788020_23_23", + "D_204425387_23_23", + "D_558929585_23_23", + "D_233764880_23_23", + "D_905145893_23_23", + "D_473190270_23_23", + "D_483735587_23_23", + "D_331759900_23_23", + "D_513077276_23_23", + "D_519974530_23_23", + "D_907776050_23_23", + "D_271684775_23_23", + "D_252160589_23_23", + "D_774774759_23_23", + "D_127257956_23_23", + "D_496917282_23_23", + "D_908129316_23_23", + "D_795003496_23_23", + "D_969177591_23_23", + "D_116065851_23_23", + "D_278159347_23_23", + "D_845219872_23_23", + "D_640010727_24_24", + "D_236590500_24_24", + "D_718867914_24_24", + "_CONTINUE2_24_24", + "D_812370563_24_24", + "D_900939817_24_24", + "D_938150507_24_24", + "D_601211723_24_24", + "D_861788020_24_24", + "D_204425387_24_24", + "D_558929585_24_24", + "D_233764880_24_24", + "D_905145893_24_24", + "D_473190270_24_24", + "D_483735587_24_24", + "D_331759900_24_24", + "D_513077276_24_24", + "D_519974530_24_24", + "D_907776050_24_24", + "D_271684775_24_24", + "D_252160589_24_24", + "D_774774759_24_24", + "D_127257956_24_24", + "D_496917282_24_24", + "D_908129316_24_24", + "D_795003496_24_24", + "D_969177591_24_24", + "D_116065851_24_24", + "D_278159347_24_24", + "D_845219872_24_24", + "D_640010727_25_25", + "D_236590500_25_25", + "D_718867914_25_25", + "_CONTINUE2_25_25", + "D_812370563_25_25", + "D_900939817_25_25", + "D_938150507_25_25", + "D_601211723_25_25", + "D_861788020_25_25", + "D_204425387_25_25", + "D_558929585_25_25", + "D_233764880_25_25", + "D_905145893_25_25", + "D_473190270_25_25", + "D_483735587_25_25", + "D_331759900_25_25", + "D_513077276_25_25", + "D_519974530_25_25", + "D_907776050_25_25", + "D_271684775_25_25", + "D_252160589_25_25", + "D_774774759_25_25", + "D_127257956_25_25", + "D_496917282_25_25", + "D_908129316_25_25", + "D_795003496_25_25", + "D_969177591_25_25", + "D_116065851_25_25", + "D_278159347_25_25", + "D_845219872_25_25", + "D_627122657", + "D_114529380", + "D_403258164", + "D_118061122", + "D_759004335" + ], + "byKind": { + "default": 59, + "no-response": 70, + "response": 1702 + }, + "byResolution": { + "exact": 1681, + "virtual-loop": 150 + }, + "triggerTypes": { + "checkbox": 1386, + "hidden": 129, + "radio": 316 + }, + "triggerValues": [ + "583826374", + "636411467", + "458435048", + "706998638", + "973565052", + "586825330", + "412790539", + "746038746", + "104430631", + "698944820", + "838744325", + "769790179", + "699553344", + "700811160", + "336505365", + "132548932", + "747787163", + "693851465", + "512012656", + "619337095", + "535003378", + "359025642", + "407340134", + "427219143", + "406890409", + "704544306", + "691766591", + "308645635", + "731115613", + "567284980", + "986548173", + "285995100", + "545628561", + "709786039", + "984479578", + "726539692", + "158044532", + "943054522", + "827542780", + "167238688", + "636030086", + "239687183", + "134592375", + "164910211", + "796616844", + "436689514", + "296357383", + "901077233", + "136956596", + "455776698", + "155874194", + "880962432", + "691450854", + "509721537", + "863286658", + "386524148", + "937208760", + "746542057", + "353358909", + "797189152", + "633546100", + "866002271", + "209101810", + "413734739", + "215525943", + "118789503", + "715563991", + "533491176", + "220755749", + "465318416", + "630100221", + "692881833", + "654450030", + "532603425", + "733236542", + "961987554", + "113771607", + "668256654", + "752953170", + "325506683", + "335563082", + "955881350", + "492902023", + "256196714", + "802859122", + "520432394", + "667901971", + "807835037", + "333647143", + "109972911", + "448068764", + "537173119", + "770550588", + "970716952", + "524029283", + "500023550", + "178420302", + "939782495", + "135725957", + "518416174", + "847945207", + "283025574", + "942970912", + "596122041", + "489400183", + "863246236", + "607793249", + "532172400", + "754745617", + "665036297", + "200837530", + "990319383", + "487917585", + "603181162", + "482225200", + "764891959", + "139822395", + "723614811", + "295976386", + "248374037" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_384191091,583826374)", + "equals(D_384191091,636411467)", + "equals(D_384191091,458435048)", + "equals(D_384191091,706998638)", + "equals(D_384191091,973565052)", + "equals(D_384191091,586825330)", + "equals(D_384191091,412790539)", + "equals(D_407056417,536341288)", + "equals(D_167101091,698944820)", + "equals(D_167101091,838744325)", + "equals(D_167101091,769790179)", + "equals(D_167101091,699553344)", + "equals(D_167101091,700811160)", + "equals(D_167101091,336505365)", + "equals(D_167101091,132548932)", + "equals(D_167101091,747787163)", + "equals(D_167101091,693851465)", + "equals(D_167101091,512012656)", + "equals(D_167101091,619337095)", + "equals(D_894259747,359025642)", + "equals(D_894259747,407340134)", + "equals(D_894259747,427219143)", + "equals(D_180961306,406890409)", + "equals(D_180961306,704544306)", + "equals(D_180961306,691766591)", + "equals(D_180961306,308645635)", + "equals(D_180961306,731115613)", + "equals(D_180961306,567284980)", + "equals(D_180961306,986548173)", + "equals(D_180961306,285995100)", + "equals(D_180961306,545628561)", + "equals(D_180961306,709786039)", + "equals(D_180961306,984479578)", + "equals(D_900541533,726539692)", + "equals(D_900541533,158044532)", + "equals(D_900541533,943054522)", + "equals(D_874046190,827542780)", + "equals(D_874046190,167238688)", + "equals(D_543728565,636030086)", + "equals(D_543728565,239687183)", + "equals(D_543728565,134592375)", + "equals(D_874709643,164910211)", + "equals(D_874709643,796616844)", + "equals(D_874709643,436689514)", + "equals(D_874709643,296357383)", + "equals(D_874709643,901077233)", + "equals(D_874709643,136956596)", + "equals(D_874709643,455776698)", + "equals(D_874709643,155874194)", + "equals(D_874709643,880962432)", + "equals(D_874709643,691450854)", + "equals(D_750420077,578416151)", + "equals(D_750420077,434651539)", + "equals(D_750420077,700100953)", + "equals(D_725626004,509721537)", + "equals(D_725626004,863286658)", + "equals(D_725626004,386524148)", + "equals(D_725626004,937208760)", + "equals(D_725626004,746542057)", + "equals(D_725626004,854945381)", + "equals(D_750420077,108025529)", + "and(equals(D_750420077,582784267),equals(D_750420077,751402477))", + "equals(D_750420077,751402477)", + "equals(D_750420077,582784267)", + "equals(D_624179836,797189152)", + "equals(D_624179836,633546100)", + "equals(D_624179836,866002271)", + "equals(D_624179836,209101810)", + "equals(D_624179836,413734739)", + "equals(D_624179836,215525943)", + "equals(D_624179836,118789503)", + "equals(D_624179836,715563991)", + "equals(D_624179836,533491176)", + "equals(D_517307064,752953170)", + "equals(D_517307064,325506683)", + "equals(D_517307064,335563082)", + "equals(D_517307064,955881350)", + "equals(D_517307064,492902023)", + "equals(D_517307064,256196714)", + "equals(D_517307064,802859122)", + "equals(D_517307064,520432394)", + "equals(D_517307064,667901971)", + "equals(D_517307064,807835037)", + "exists('D_942347130')", + "doesNotExist('D_942347130')", + "equals(D_624179836,220755749)", + "equals(D_624179836,465318416)", + "equals(D_624179836,630100221)", + "and(equals(D_624179836,630100221),or(equals(D_378892977,109972911),equals(D_378892977,333647143)))", + "equals(D_624179836,692881833)", + "and(equals(D_624179836,692881833),or(equals(D_224791140,537173119),equals(D_224791140,448068764)))", + "equals(D_624179836,654450030)", + "equals(D_624179836,532603425)", + "and(equals(D_624179836,532603425),or(equals(D_946504570,970716952),equals(D_946504570,770550588)))", + "equals(D_624179836,733236542)", + "and(equals(D_624179836,733236542),or(equals(D_107060069,500023550),equals(D_107060069,524029283)))", + "equals(D_624179836,961987554)", + "greaterThanOrEqual(D_795940097,1)", + "greaterThan(D_795940097,1)", + "_value('age') >=18", + "_value('age') >=25", + "_value('age') >=35", + "_value('age') >=45", + "_value('age') >=55", + "greaterThanOrEqual(percentDiff(D_821387277,D_121646540),.05)", + "greaterThanOrEqual(percentDiff(D_121646540,D_950080618),.05)", + "greaterThanOrEqual(percentDiff(D_950080618,D_407167089),.05)", + "greaterThanOrEqual(percentDiff(D_407167089,D_503154158),.05)", + "_value(\"age\") >= 40", + "valueIsOneOf(\"D_407056417\",536341288) and _value(\"age\") >= 40", + "valueIsOneOf(\"D_407056417\",654207589) and _value(\"age\") >= 40", + "equals(D_170440011,353358909)", + "doesNotEqual(D_170440011,353358909)", + "equals(D_814510313,939782495)", + "equals(D_814510313,135725957)", + "equals(D_814510313,518416174)", + "equals(D_814510313,847945207)", + "equals(D_814510313,283025574)", + "equals(D_814510313,942970912)", + "equals(D_814510313,596122041)", + "equals(D_814510313,489400183)", + "equals(D_814510313,863246236)", + "equals(D_814510313,607793249)", + "equals(D_814510313,532172400)", + "equals(D_814510313,754745617)", + "equals(D_814510313,665036297)", + "equals(D_814510313,200837530)", + "equals(D_814510313,990319383)", + "equals(D_814510313,487917585)", + "equals(D_814510313,603181162)", + "equals(D_814510313,482225200)", + "equals(D_814510313,764891959)", + "equals(D_814510313,139822395)", + "equals(D_814510313,723614811)", + "valueIsOneOf(\"D_814510313\",807835037) or valueLength(\"D_677702321\")>0", + "valueLength('D_677702321')>0", + "doesNotExist('D_677702321')", + "equals(D_814510313,178420302)", + "equals(D_367374606,353358909)", + "doesNotEqual(D_367374606,353358909)", + "equals(D_173240848,939782495)", + "equals(D_173240848,135725957)", + "equals(D_173240848,518416174)", + "equals(D_173240848,847945207)", + "equals(D_173240848,942970912)", + "equals(D_173240848,596122041)", + "equals(D_173240848,489400183)", + "equals(D_173240848,863246236)", + "equals(D_173240848,607793249)", + "equals(D_173240848,532172400)", + "equals(D_173240848,754745617)", + "equals(D_173240848,665036297)", + "equals(D_173240848,200837530)", + "equals(D_173240848,990319383)", + "equals(D_173240848,487917585)", + "equals(D_173240848,482225200)", + "equals(D_173240848,295976386)", + "equals(D_173240848,764891959)", + "equals(D_173240848,248374037)", + "equals(D_173240848,139822395)", + "valueIsOneOf(\"D_173240848\",807835037) or valueLength(\"D_195093589\")>0", + "valueLength('D_195093589')>0", + "doesNotExist('D_195093589')", + "equals(D_173240848,178420302)", + "isNotDefined(D_694265648,0)", + "or(equals(D_694265648,0),or(isNotDefined(D_694265648,0),greaterThanOrEqual(D_694265648,2)))", + "1==1", + "1>1", + "equals(isNotDefined(D_406098499_1_1,false),false)", + "doesNotEqual(isNotDefined(D_406098499_1_1,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_1_1,false),false),greaterThan(1,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_1_1,false),false),equals(1,1)),doesNotEqual(D_694265648,1))", + "valueIsOneOf(\"D_992987417\",353358909,288105839,626558982)", + "equals(D_890637099_1_1,353358909)", + "doesNotEqual(D_890637099_1_1,353358909)", + "equals(D_578895128_1_1,939782495)", + "equals(D_578895128_1_1,135725957)", + "equals(D_578895128_1_1,518416174)", + "equals(D_578895128_1_1,847945207)", + "equals(D_578895128_1_1,283025574)", + "equals(D_578895128_1_1,942970912)", + "equals(D_578895128_1_1,596122041)", + "equals(D_578895128_1_1,489400183)", + "equals(D_578895128_1_1,863246236)", + "equals(D_578895128_1_1,607793249)", + "equals(D_578895128_1_1,532172400)", + "equals(D_578895128_1_1,754745617)", + "equals(D_578895128_1_1,665036297)", + "equals(D_578895128_1_1,200837530)", + "equals(D_578895128_1_1,990319383)", + "equals(D_578895128_1_1,487917585)", + "equals(D_578895128_1_1,603181162)", + "equals(D_578895128_1_1,482225200)", + "equals(D_578895128_1_1,295976386)", + "equals(D_578895128_1_1,764891959)", + "equals(D_578895128_1_1,248374037)", + "equals(D_578895128_1_1,139822395)", + "equals(D_578895128_1_1,723614811)", + "equals(D_578895128_1_1,807835037)", + "exists('D_957429734_1_1')", + "doesNotExist('D_957429734_1_1')", + "equals(D_578895128_1_1,178420302)", + "selectionCount(\"D_578895128_1_1\",true)>0 or valueLength(\"D_957429734_1_1\")>0", + "valueLength('D_406098499_1_1')>0", + "equals(D_579563781_1_1,536341288)", + "equals(D_579563781_1_1,654207589)", + "equals(D_579563781_1_1,178420302)", + "allExist('D_807431780_1_1','D_578895128_1_1')", + "equals(D_807431780_1_1,353358909)", + "equals(D_807431780_1_1,104430631)", + "valueIsOneOf('D_589588769_1_1',555374628)", + "valueIsOneOf('D_589588769_1_1',871673221)", + "valueIsOneOf('D_589588769_1_1',198654048)", + "valueIsOneOf('D_807431780_1_1',353358909)", + "equals(D_607773106_1_1,104430631)", + "equals(D_607773106_1_1,353358909)", + "equals(D_607773106_1_1,178420302)", + "2==1", + "2>1", + "equals(isNotDefined(D_406098499_2_2,false),false)", + "doesNotEqual(isNotDefined(D_406098499_2_2,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_2_2,false),false),greaterThan(2,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_2_2,false),false),equals(2,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_2_2,353358909)", + "doesNotEqual(D_890637099_2_2,353358909)", + "equals(D_578895128_2_2,939782495)", + "equals(D_578895128_2_2,135725957)", + "equals(D_578895128_2_2,518416174)", + "equals(D_578895128_2_2,847945207)", + "equals(D_578895128_2_2,283025574)", + "equals(D_578895128_2_2,942970912)", + "equals(D_578895128_2_2,596122041)", + "equals(D_578895128_2_2,489400183)", + "equals(D_578895128_2_2,863246236)", + "equals(D_578895128_2_2,607793249)", + "equals(D_578895128_2_2,532172400)", + "equals(D_578895128_2_2,754745617)", + "equals(D_578895128_2_2,665036297)", + "equals(D_578895128_2_2,200837530)", + "equals(D_578895128_2_2,990319383)", + "equals(D_578895128_2_2,487917585)", + "equals(D_578895128_2_2,603181162)", + "equals(D_578895128_2_2,482225200)", + "equals(D_578895128_2_2,295976386)", + "equals(D_578895128_2_2,764891959)", + "equals(D_578895128_2_2,248374037)", + "equals(D_578895128_2_2,139822395)", + "equals(D_578895128_2_2,723614811)", + "equals(D_578895128_2_2,807835037)", + "exists('D_957429734_2_2')", + "doesNotExist('D_957429734_2_2')", + "equals(D_578895128_2_2,178420302)", + "selectionCount(\"D_578895128_2_2\",true)>0 or valueLength(\"D_957429734_2_2\")>0", + "valueLength('D_406098499_2_2')>0", + "equals(D_579563781_2_2,536341288)", + "equals(D_579563781_2_2,654207589)", + "equals(D_579563781_2_2,178420302)", + "allExist('D_807431780_2_2','D_578895128_2_2')", + "equals(D_807431780_2_2,353358909)", + "equals(D_807431780_2_2,104430631)", + "valueIsOneOf('D_589588769_2_2',555374628)", + "valueIsOneOf('D_589588769_2_2',871673221)", + "valueIsOneOf('D_589588769_2_2',198654048)", + "valueIsOneOf('D_807431780_2_2',353358909)", + "equals(D_607773106_2_2,104430631)", + "equals(D_607773106_2_2,353358909)", + "equals(D_607773106_2_2,178420302)", + "3==1", + "3>1", + "equals(isNotDefined(D_406098499_3_3,false),false)", + "doesNotEqual(isNotDefined(D_406098499_3_3,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_3_3,false),false),greaterThan(3,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_3_3,false),false),equals(3,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_3_3,353358909)", + "doesNotEqual(D_890637099_3_3,353358909)", + "equals(D_578895128_3_3,939782495)", + "equals(D_578895128_3_3,135725957)", + "equals(D_578895128_3_3,518416174)", + "equals(D_578895128_3_3,847945207)", + "equals(D_578895128_3_3,283025574)", + "equals(D_578895128_3_3,942970912)", + "equals(D_578895128_3_3,596122041)", + "equals(D_578895128_3_3,489400183)", + "equals(D_578895128_3_3,863246236)", + "equals(D_578895128_3_3,607793249)", + "equals(D_578895128_3_3,532172400)", + "equals(D_578895128_3_3,754745617)", + "equals(D_578895128_3_3,665036297)", + "equals(D_578895128_3_3,200837530)", + "equals(D_578895128_3_3,990319383)", + "equals(D_578895128_3_3,487917585)", + "equals(D_578895128_3_3,603181162)", + "equals(D_578895128_3_3,482225200)", + "equals(D_578895128_3_3,295976386)", + "equals(D_578895128_3_3,764891959)", + "equals(D_578895128_3_3,248374037)", + "equals(D_578895128_3_3,139822395)", + "equals(D_578895128_3_3,723614811)", + "equals(D_578895128_3_3,807835037)", + "exists('D_957429734_3_3')", + "doesNotExist('D_957429734_3_3')", + "equals(D_578895128_3_3,178420302)", + "selectionCount(\"D_578895128_3_3\",true)>0 or valueLength(\"D_957429734_3_3\")>0", + "valueLength('D_406098499_3_3')>0", + "equals(D_579563781_3_3,536341288)", + "equals(D_579563781_3_3,654207589)", + "equals(D_579563781_3_3,178420302)", + "allExist('D_807431780_3_3','D_578895128_3_3')", + "equals(D_807431780_3_3,353358909)", + "equals(D_807431780_3_3,104430631)", + "valueIsOneOf('D_589588769_3_3',555374628)", + "valueIsOneOf('D_589588769_3_3',871673221)", + "valueIsOneOf('D_589588769_3_3',198654048)", + "valueIsOneOf('D_807431780_3_3',353358909)", + "equals(D_607773106_3_3,104430631)", + "equals(D_607773106_3_3,353358909)", + "equals(D_607773106_3_3,178420302)", + "4==1", + "4>1", + "equals(isNotDefined(D_406098499_4_4,false),false)", + "doesNotEqual(isNotDefined(D_406098499_4_4,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_4_4,false),false),greaterThan(4,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_4_4,false),false),equals(4,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_4_4,353358909)", + "doesNotEqual(D_890637099_4_4,353358909)", + "equals(D_578895128_4_4,939782495)", + "equals(D_578895128_4_4,135725957)", + "equals(D_578895128_4_4,518416174)", + "equals(D_578895128_4_4,847945207)", + "equals(D_578895128_4_4,283025574)", + "equals(D_578895128_4_4,942970912)", + "equals(D_578895128_4_4,596122041)", + "equals(D_578895128_4_4,489400183)", + "equals(D_578895128_4_4,863246236)", + "equals(D_578895128_4_4,607793249)", + "equals(D_578895128_4_4,532172400)", + "equals(D_578895128_4_4,754745617)", + "equals(D_578895128_4_4,665036297)", + "equals(D_578895128_4_4,200837530)", + "equals(D_578895128_4_4,990319383)", + "equals(D_578895128_4_4,487917585)", + "equals(D_578895128_4_4,603181162)", + "equals(D_578895128_4_4,482225200)", + "equals(D_578895128_4_4,295976386)", + "equals(D_578895128_4_4,764891959)", + "equals(D_578895128_4_4,248374037)", + "equals(D_578895128_4_4,139822395)", + "equals(D_578895128_4_4,723614811)", + "equals(D_578895128_4_4,807835037)", + "exists('D_957429734_4_4')", + "doesNotExist('D_957429734_4_4')", + "equals(D_578895128_4_4,178420302)", + "selectionCount(\"D_578895128_4_4\",true)>0 or valueLength(\"D_957429734_4_4\")>0", + "valueLength('D_406098499_4_4')>0", + "equals(D_579563781_4_4,536341288)", + "equals(D_579563781_4_4,654207589)", + "equals(D_579563781_4_4,178420302)", + "allExist('D_807431780_4_4','D_578895128_4_4')", + "equals(D_807431780_4_4,353358909)", + "equals(D_807431780_4_4,104430631)", + "valueIsOneOf('D_589588769_4_4',555374628)", + "valueIsOneOf('D_589588769_4_4',871673221)", + "valueIsOneOf('D_589588769_4_4',198654048)", + "valueIsOneOf('D_807431780_4_4',353358909)", + "equals(D_607773106_4_4,104430631)", + "equals(D_607773106_4_4,353358909)", + "equals(D_607773106_4_4,178420302)", + "5==1", + "5>1", + "equals(isNotDefined(D_406098499_5_5,false),false)", + "doesNotEqual(isNotDefined(D_406098499_5_5,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_5_5,false),false),greaterThan(5,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_5_5,false),false),equals(5,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_5_5,353358909)", + "doesNotEqual(D_890637099_5_5,353358909)", + "equals(D_578895128_5_5,939782495)", + "equals(D_578895128_5_5,135725957)", + "equals(D_578895128_5_5,518416174)", + "equals(D_578895128_5_5,847945207)", + "equals(D_578895128_5_5,283025574)", + "equals(D_578895128_5_5,942970912)", + "equals(D_578895128_5_5,596122041)", + "equals(D_578895128_5_5,489400183)", + "equals(D_578895128_5_5,863246236)", + "equals(D_578895128_5_5,607793249)", + "equals(D_578895128_5_5,532172400)", + "equals(D_578895128_5_5,754745617)", + "equals(D_578895128_5_5,665036297)", + "equals(D_578895128_5_5,200837530)", + "equals(D_578895128_5_5,990319383)", + "equals(D_578895128_5_5,487917585)", + "equals(D_578895128_5_5,603181162)", + "equals(D_578895128_5_5,482225200)", + "equals(D_578895128_5_5,295976386)", + "equals(D_578895128_5_5,764891959)", + "equals(D_578895128_5_5,248374037)", + "equals(D_578895128_5_5,139822395)", + "equals(D_578895128_5_5,723614811)", + "equals(D_578895128_5_5,807835037)", + "exists('D_957429734_5_5')", + "doesNotExist('D_957429734_5_5')", + "equals(D_578895128_5_5,178420302)", + "selectionCount(\"D_578895128_5_5\",true)>0 or valueLength(\"D_957429734_5_5\")>0", + "valueLength('D_406098499_5_5')>0", + "equals(D_579563781_5_5,536341288)", + "equals(D_579563781_5_5,654207589)", + "equals(D_579563781_5_5,178420302)", + "allExist('D_807431780_5_5','D_578895128_5_5')", + "equals(D_807431780_5_5,353358909)", + "equals(D_807431780_5_5,104430631)", + "valueIsOneOf('D_589588769_5_5',555374628)", + "valueIsOneOf('D_589588769_5_5',871673221)", + "valueIsOneOf('D_589588769_5_5',198654048)", + "valueIsOneOf('D_807431780_5_5',353358909)", + "equals(D_607773106_5_5,104430631)", + "equals(D_607773106_5_5,353358909)", + "equals(D_607773106_5_5,178420302)", + "6==1", + "6>1", + "equals(isNotDefined(D_406098499_6_6,false),false)", + "doesNotEqual(isNotDefined(D_406098499_6_6,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_6_6,false),false),greaterThan(6,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_6_6,false),false),equals(6,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_6_6,353358909)", + "doesNotEqual(D_890637099_6_6,353358909)", + "equals(D_578895128_6_6,939782495)", + "equals(D_578895128_6_6,135725957)", + "equals(D_578895128_6_6,518416174)", + "equals(D_578895128_6_6,847945207)", + "equals(D_578895128_6_6,283025574)", + "equals(D_578895128_6_6,942970912)", + "equals(D_578895128_6_6,596122041)", + "equals(D_578895128_6_6,489400183)", + "equals(D_578895128_6_6,863246236)", + "equals(D_578895128_6_6,607793249)", + "equals(D_578895128_6_6,532172400)", + "equals(D_578895128_6_6,754745617)", + "equals(D_578895128_6_6,665036297)", + "equals(D_578895128_6_6,200837530)", + "equals(D_578895128_6_6,990319383)", + "equals(D_578895128_6_6,487917585)", + "equals(D_578895128_6_6,603181162)", + "equals(D_578895128_6_6,482225200)", + "equals(D_578895128_6_6,295976386)", + "equals(D_578895128_6_6,764891959)", + "equals(D_578895128_6_6,248374037)", + "equals(D_578895128_6_6,139822395)", + "equals(D_578895128_6_6,723614811)", + "equals(D_578895128_6_6,807835037)", + "exists('D_957429734_6_6')", + "doesNotExist('D_957429734_6_6')", + "equals(D_578895128_6_6,178420302)", + "selectionCount(\"D_578895128_6_6\",true)>0 or valueLength(\"D_957429734_6_6\")>0", + "valueLength('D_406098499_6_6')>0", + "equals(D_579563781_6_6,536341288)", + "equals(D_579563781_6_6,654207589)", + "equals(D_579563781_6_6,178420302)", + "allExist('D_807431780_6_6','D_578895128_6_6')", + "equals(D_807431780_6_6,353358909)", + "equals(D_807431780_6_6,104430631)", + "valueIsOneOf('D_589588769_6_6',555374628)", + "valueIsOneOf('D_589588769_6_6',871673221)", + "valueIsOneOf('D_589588769_6_6',198654048)", + "valueIsOneOf('D_807431780_6_6',353358909)", + "equals(D_607773106_6_6,104430631)", + "equals(D_607773106_6_6,353358909)", + "equals(D_607773106_6_6,178420302)", + "7==1", + "7>1", + "equals(isNotDefined(D_406098499_7_7,false),false)", + "doesNotEqual(isNotDefined(D_406098499_7_7,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_7_7,false),false),greaterThan(7,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_7_7,false),false),equals(7,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_7_7,353358909)", + "doesNotEqual(D_890637099_7_7,353358909)", + "equals(D_578895128_7_7,939782495)", + "equals(D_578895128_7_7,135725957)", + "equals(D_578895128_7_7,518416174)", + "equals(D_578895128_7_7,847945207)", + "equals(D_578895128_7_7,283025574)", + "equals(D_578895128_7_7,942970912)", + "equals(D_578895128_7_7,596122041)", + "equals(D_578895128_7_7,489400183)", + "equals(D_578895128_7_7,863246236)", + "equals(D_578895128_7_7,607793249)", + "equals(D_578895128_7_7,532172400)", + "equals(D_578895128_7_7,754745617)", + "equals(D_578895128_7_7,665036297)", + "equals(D_578895128_7_7,200837530)", + "equals(D_578895128_7_7,990319383)", + "equals(D_578895128_7_7,487917585)", + "equals(D_578895128_7_7,603181162)", + "equals(D_578895128_7_7,482225200)", + "equals(D_578895128_7_7,295976386)", + "equals(D_578895128_7_7,764891959)", + "equals(D_578895128_7_7,248374037)", + "equals(D_578895128_7_7,139822395)", + "equals(D_578895128_7_7,723614811)", + "equals(D_578895128_7_7,807835037)", + "exists('D_957429734_7_7')", + "doesNotExist('D_957429734_7_7')", + "equals(D_578895128_7_7,178420302)", + "selectionCount(\"D_578895128_7_7\",true)>0 or valueLength(\"D_957429734_7_7\")>0", + "valueLength('D_406098499_7_7')>0", + "equals(D_579563781_7_7,536341288)", + "equals(D_579563781_7_7,654207589)", + "equals(D_579563781_7_7,178420302)", + "allExist('D_807431780_7_7','D_578895128_7_7')", + "equals(D_807431780_7_7,353358909)", + "equals(D_807431780_7_7,104430631)", + "valueIsOneOf('D_589588769_7_7',555374628)", + "valueIsOneOf('D_589588769_7_7',871673221)", + "valueIsOneOf('D_589588769_7_7',198654048)", + "valueIsOneOf('D_807431780_7_7',353358909)", + "equals(D_607773106_7_7,104430631)", + "equals(D_607773106_7_7,353358909)", + "equals(D_607773106_7_7,178420302)", + "8==1", + "8>1", + "equals(isNotDefined(D_406098499_8_8,false),false)", + "doesNotEqual(isNotDefined(D_406098499_8_8,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_8_8,false),false),greaterThan(8,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_8_8,false),false),equals(8,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_8_8,353358909)", + "doesNotEqual(D_890637099_8_8,353358909)", + "equals(D_578895128_8_8,939782495)", + "equals(D_578895128_8_8,135725957)", + "equals(D_578895128_8_8,518416174)", + "equals(D_578895128_8_8,847945207)", + "equals(D_578895128_8_8,283025574)", + "equals(D_578895128_8_8,942970912)", + "equals(D_578895128_8_8,596122041)", + "equals(D_578895128_8_8,489400183)", + "equals(D_578895128_8_8,863246236)", + "equals(D_578895128_8_8,607793249)", + "equals(D_578895128_8_8,532172400)", + "equals(D_578895128_8_8,754745617)", + "equals(D_578895128_8_8,665036297)", + "equals(D_578895128_8_8,200837530)", + "equals(D_578895128_8_8,990319383)", + "equals(D_578895128_8_8,487917585)", + "equals(D_578895128_8_8,603181162)", + "equals(D_578895128_8_8,482225200)", + "equals(D_578895128_8_8,295976386)", + "equals(D_578895128_8_8,764891959)", + "equals(D_578895128_8_8,248374037)", + "equals(D_578895128_8_8,139822395)", + "equals(D_578895128_8_8,723614811)", + "equals(D_578895128_8_8,807835037)", + "exists('D_957429734_8_8')", + "doesNotExist('D_957429734_8_8')", + "equals(D_578895128_8_8,178420302)", + "selectionCount(\"D_578895128_8_8\",true)>0 or valueLength(\"D_957429734_8_8\")>0", + "valueLength('D_406098499_8_8')>0", + "equals(D_579563781_8_8,536341288)", + "equals(D_579563781_8_8,654207589)", + "equals(D_579563781_8_8,178420302)", + "allExist('D_807431780_8_8','D_578895128_8_8')", + "equals(D_807431780_8_8,353358909)", + "equals(D_807431780_8_8,104430631)", + "valueIsOneOf('D_589588769_8_8',555374628)", + "valueIsOneOf('D_589588769_8_8',871673221)", + "valueIsOneOf('D_589588769_8_8',198654048)", + "valueIsOneOf('D_807431780_8_8',353358909)", + "equals(D_607773106_8_8,104430631)", + "equals(D_607773106_8_8,353358909)", + "equals(D_607773106_8_8,178420302)", + "9==1", + "9>1", + "equals(isNotDefined(D_406098499_9_9,false),false)", + "doesNotEqual(isNotDefined(D_406098499_9_9,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_9_9,false),false),greaterThan(9,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_9_9,false),false),equals(9,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_9_9,353358909)", + "doesNotEqual(D_890637099_9_9,353358909)", + "equals(D_578895128_9_9,939782495)", + "equals(D_578895128_9_9,135725957)", + "equals(D_578895128_9_9,518416174)", + "equals(D_578895128_9_9,847945207)", + "equals(D_578895128_9_9,283025574)", + "equals(D_578895128_9_9,942970912)", + "equals(D_578895128_9_9,596122041)", + "equals(D_578895128_9_9,489400183)", + "equals(D_578895128_9_9,863246236)", + "equals(D_578895128_9_9,607793249)", + "equals(D_578895128_9_9,532172400)", + "equals(D_578895128_9_9,754745617)", + "equals(D_578895128_9_9,665036297)", + "equals(D_578895128_9_9,200837530)", + "equals(D_578895128_9_9,990319383)", + "equals(D_578895128_9_9,487917585)", + "equals(D_578895128_9_9,603181162)", + "equals(D_578895128_9_9,482225200)", + "equals(D_578895128_9_9,295976386)", + "equals(D_578895128_9_9,764891959)", + "equals(D_578895128_9_9,248374037)", + "equals(D_578895128_9_9,139822395)", + "equals(D_578895128_9_9,723614811)", + "equals(D_578895128_9_9,807835037)", + "exists('D_957429734_9_9')", + "doesNotExist('D_957429734_9_9')", + "equals(D_578895128_9_9,178420302)", + "selectionCount(\"D_578895128_9_9\",true)>0 or valueLength(\"D_957429734_9_9\")>0", + "valueLength('D_406098499_9_9')>0", + "equals(D_579563781_9_9,536341288)", + "equals(D_579563781_9_9,654207589)", + "equals(D_579563781_9_9,178420302)", + "allExist('D_807431780_9_9','D_578895128_9_9')", + "equals(D_807431780_9_9,353358909)", + "equals(D_807431780_9_9,104430631)", + "valueIsOneOf('D_589588769_9_9',555374628)", + "valueIsOneOf('D_589588769_9_9',871673221)", + "valueIsOneOf('D_589588769_9_9',198654048)", + "valueIsOneOf('D_807431780_9_9',353358909)", + "equals(D_607773106_9_9,104430631)", + "equals(D_607773106_9_9,353358909)", + "equals(D_607773106_9_9,178420302)", + "10==1", + "10>1", + "equals(isNotDefined(D_406098499_10_10,false),false)", + "doesNotEqual(isNotDefined(D_406098499_10_10,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_10_10,false),false),greaterThan(10,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_10_10,false),false),equals(10,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_10_10,353358909)", + "doesNotEqual(D_890637099_10_10,353358909)", + "equals(D_578895128_10_10,939782495)", + "equals(D_578895128_10_10,135725957)", + "equals(D_578895128_10_10,518416174)", + "equals(D_578895128_10_10,847945207)", + "equals(D_578895128_10_10,283025574)", + "equals(D_578895128_10_10,942970912)", + "equals(D_578895128_10_10,596122041)", + "equals(D_578895128_10_10,489400183)", + "equals(D_578895128_10_10,863246236)", + "equals(D_578895128_10_10,607793249)", + "equals(D_578895128_10_10,532172400)", + "equals(D_578895128_10_10,754745617)", + "equals(D_578895128_10_10,665036297)", + "equals(D_578895128_10_10,200837530)", + "equals(D_578895128_10_10,990319383)", + "equals(D_578895128_10_10,487917585)", + "equals(D_578895128_10_10,603181162)", + "equals(D_578895128_10_10,482225200)", + "equals(D_578895128_10_10,295976386)", + "equals(D_578895128_10_10,764891959)", + "equals(D_578895128_10_10,248374037)", + "equals(D_578895128_10_10,139822395)", + "equals(D_578895128_10_10,723614811)", + "equals(D_578895128_10_10,807835037)", + "exists('D_957429734_10_10')", + "doesNotExist('D_957429734_10_10')", + "equals(D_578895128_10_10,178420302)", + "selectionCount(\"D_578895128_10_10\",true)>0 or valueLength(\"D_957429734_10_10\")>0", + "valueLength('D_406098499_10_10')>0", + "equals(D_579563781_10_10,536341288)", + "equals(D_579563781_10_10,654207589)", + "equals(D_579563781_10_10,178420302)", + "allExist('D_807431780_10_10','D_578895128_10_10')", + "equals(D_807431780_10_10,353358909)", + "equals(D_807431780_10_10,104430631)", + "valueIsOneOf('D_589588769_10_10',555374628)", + "valueIsOneOf('D_589588769_10_10',871673221)", + "valueIsOneOf('D_589588769_10_10',198654048)", + "valueIsOneOf('D_807431780_10_10',353358909)", + "equals(D_607773106_10_10,104430631)", + "equals(D_607773106_10_10,353358909)", + "equals(D_607773106_10_10,178420302)", + "11==1", + "11>1", + "equals(isNotDefined(D_406098499_11_11,false),false)", + "doesNotEqual(isNotDefined(D_406098499_11_11,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_11_11,false),false),greaterThan(11,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_11_11,false),false),equals(11,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_11_11,353358909)", + "doesNotEqual(D_890637099_11_11,353358909)", + "equals(D_578895128_11_11,939782495)", + "equals(D_578895128_11_11,135725957)", + "equals(D_578895128_11_11,518416174)", + "equals(D_578895128_11_11,847945207)", + "equals(D_578895128_11_11,283025574)", + "equals(D_578895128_11_11,942970912)", + "equals(D_578895128_11_11,596122041)", + "equals(D_578895128_11_11,489400183)", + "equals(D_578895128_11_11,863246236)", + "equals(D_578895128_11_11,607793249)", + "equals(D_578895128_11_11,532172400)", + "equals(D_578895128_11_11,754745617)", + "equals(D_578895128_11_11,665036297)", + "equals(D_578895128_11_11,200837530)", + "equals(D_578895128_11_11,990319383)", + "equals(D_578895128_11_11,487917585)", + "equals(D_578895128_11_11,603181162)", + "equals(D_578895128_11_11,482225200)", + "equals(D_578895128_11_11,295976386)", + "equals(D_578895128_11_11,764891959)", + "equals(D_578895128_11_11,248374037)", + "equals(D_578895128_11_11,139822395)", + "equals(D_578895128_11_11,723614811)", + "equals(D_578895128_11_11,807835037)", + "exists('D_957429734_11_11')", + "doesNotExist('D_957429734_11_11')", + "equals(D_578895128_11_11,178420302)", + "selectionCount(\"D_578895128_11_11\",true)>0 or valueLength(\"D_957429734_11_11\")>0", + "valueLength('D_406098499_11_11')>0", + "equals(D_579563781_11_11,536341288)", + "equals(D_579563781_11_11,654207589)", + "equals(D_579563781_11_11,178420302)", + "allExist('D_807431780_11_11','D_578895128_11_11')", + "equals(D_807431780_11_11,353358909)", + "equals(D_807431780_11_11,104430631)", + "valueIsOneOf('D_589588769_11_11',555374628)", + "valueIsOneOf('D_589588769_11_11',871673221)", + "valueIsOneOf('D_589588769_11_11',198654048)", + "valueIsOneOf('D_807431780_11_11',353358909)", + "equals(D_607773106_11_11,104430631)", + "equals(D_607773106_11_11,353358909)", + "equals(D_607773106_11_11,178420302)", + "12==1", + "12>1", + "equals(isNotDefined(D_406098499_12_12,false),false)", + "doesNotEqual(isNotDefined(D_406098499_12_12,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_12_12,false),false),greaterThan(12,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_12_12,false),false),equals(12,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_12_12,353358909)", + "doesNotEqual(D_890637099_12_12,353358909)", + "equals(D_578895128_12_12,939782495)", + "equals(D_578895128_12_12,135725957)", + "equals(D_578895128_12_12,518416174)", + "equals(D_578895128_12_12,847945207)", + "equals(D_578895128_12_12,283025574)", + "equals(D_578895128_12_12,942970912)", + "equals(D_578895128_12_12,596122041)", + "equals(D_578895128_12_12,489400183)", + "equals(D_578895128_12_12,863246236)", + "equals(D_578895128_12_12,607793249)", + "equals(D_578895128_12_12,532172400)", + "equals(D_578895128_12_12,754745617)", + "equals(D_578895128_12_12,665036297)", + "equals(D_578895128_12_12,200837530)", + "equals(D_578895128_12_12,990319383)", + "equals(D_578895128_12_12,487917585)", + "equals(D_578895128_12_12,603181162)", + "equals(D_578895128_12_12,482225200)", + "equals(D_578895128_12_12,295976386)", + "equals(D_578895128_12_12,764891959)", + "equals(D_578895128_12_12,248374037)", + "equals(D_578895128_12_12,139822395)", + "equals(D_578895128_12_12,723614811)", + "equals(D_578895128_12_12,807835037)", + "exists('D_957429734_12_12')", + "doesNotExist('D_957429734_12_12')", + "equals(D_578895128_12_12,178420302)", + "selectionCount(\"D_578895128_12_12\",true)>0 or valueLength(\"D_957429734_12_12\")>0", + "valueLength('D_406098499_12_12')>0", + "equals(D_579563781_12_12,536341288)", + "equals(D_579563781_12_12,654207589)", + "equals(D_579563781_12_12,178420302)", + "allExist('D_807431780_12_12','D_578895128_12_12')", + "equals(D_807431780_12_12,353358909)", + "equals(D_807431780_12_12,104430631)", + "valueIsOneOf('D_589588769_12_12',555374628)", + "valueIsOneOf('D_589588769_12_12',871673221)", + "valueIsOneOf('D_589588769_12_12',198654048)", + "valueIsOneOf('D_807431780_12_12',353358909)", + "equals(D_607773106_12_12,104430631)", + "equals(D_607773106_12_12,353358909)", + "equals(D_607773106_12_12,178420302)", + "13==1", + "13>1", + "equals(isNotDefined(D_406098499_13_13,false),false)", + "doesNotEqual(isNotDefined(D_406098499_13_13,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_13_13,false),false),greaterThan(13,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_13_13,false),false),equals(13,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_13_13,353358909)", + "doesNotEqual(D_890637099_13_13,353358909)", + "equals(D_578895128_13_13,939782495)", + "equals(D_578895128_13_13,135725957)", + "equals(D_578895128_13_13,518416174)", + "equals(D_578895128_13_13,847945207)", + "equals(D_578895128_13_13,283025574)", + "equals(D_578895128_13_13,942970912)", + "equals(D_578895128_13_13,596122041)", + "equals(D_578895128_13_13,489400183)", + "equals(D_578895128_13_13,863246236)", + "equals(D_578895128_13_13,607793249)", + "equals(D_578895128_13_13,532172400)", + "equals(D_578895128_13_13,754745617)", + "equals(D_578895128_13_13,665036297)", + "equals(D_578895128_13_13,200837530)", + "equals(D_578895128_13_13,990319383)", + "equals(D_578895128_13_13,487917585)", + "equals(D_578895128_13_13,603181162)", + "equals(D_578895128_13_13,482225200)", + "equals(D_578895128_13_13,295976386)", + "equals(D_578895128_13_13,764891959)", + "equals(D_578895128_13_13,248374037)", + "equals(D_578895128_13_13,139822395)", + "equals(D_578895128_13_13,723614811)", + "equals(D_578895128_13_13,807835037)", + "exists('D_957429734_13_13')", + "doesNotExist('D_957429734_13_13')", + "equals(D_578895128_13_13,178420302)", + "selectionCount(\"D_578895128_13_13\",true)>0 or valueLength(\"D_957429734_13_13\")>0", + "valueLength('D_406098499_13_13')>0", + "equals(D_579563781_13_13,536341288)", + "equals(D_579563781_13_13,654207589)", + "equals(D_579563781_13_13,178420302)", + "allExist('D_807431780_13_13','D_578895128_13_13')", + "equals(D_807431780_13_13,353358909)", + "equals(D_807431780_13_13,104430631)", + "valueIsOneOf('D_589588769_13_13',555374628)", + "valueIsOneOf('D_589588769_13_13',871673221)", + "valueIsOneOf('D_589588769_13_13',198654048)", + "valueIsOneOf('D_807431780_13_13',353358909)", + "equals(D_607773106_13_13,104430631)", + "equals(D_607773106_13_13,353358909)", + "equals(D_607773106_13_13,178420302)", + "14==1", + "14>1", + "equals(isNotDefined(D_406098499_14_14,false),false)", + "doesNotEqual(isNotDefined(D_406098499_14_14,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_14_14,false),false),greaterThan(14,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_14_14,false),false),equals(14,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_14_14,353358909)", + "doesNotEqual(D_890637099_14_14,353358909)", + "equals(D_578895128_14_14,939782495)", + "equals(D_578895128_14_14,135725957)", + "equals(D_578895128_14_14,518416174)", + "equals(D_578895128_14_14,847945207)", + "equals(D_578895128_14_14,283025574)", + "equals(D_578895128_14_14,942970912)", + "equals(D_578895128_14_14,596122041)", + "equals(D_578895128_14_14,489400183)", + "equals(D_578895128_14_14,863246236)", + "equals(D_578895128_14_14,607793249)", + "equals(D_578895128_14_14,532172400)", + "equals(D_578895128_14_14,754745617)", + "equals(D_578895128_14_14,665036297)", + "equals(D_578895128_14_14,200837530)", + "equals(D_578895128_14_14,990319383)", + "equals(D_578895128_14_14,487917585)", + "equals(D_578895128_14_14,603181162)", + "equals(D_578895128_14_14,482225200)", + "equals(D_578895128_14_14,295976386)", + "equals(D_578895128_14_14,764891959)", + "equals(D_578895128_14_14,248374037)", + "equals(D_578895128_14_14,139822395)", + "equals(D_578895128_14_14,723614811)", + "equals(D_578895128_14_14,807835037)", + "exists('D_957429734_14_14')", + "doesNotExist('D_957429734_14_14')", + "equals(D_578895128_14_14,178420302)", + "selectionCount(\"D_578895128_14_14\",true)>0 or valueLength(\"D_957429734_14_14\")>0", + "valueLength('D_406098499_14_14')>0", + "equals(D_579563781_14_14,536341288)", + "equals(D_579563781_14_14,654207589)", + "equals(D_579563781_14_14,178420302)", + "allExist('D_807431780_14_14','D_578895128_14_14')", + "equals(D_807431780_14_14,353358909)", + "equals(D_807431780_14_14,104430631)", + "valueIsOneOf('D_589588769_14_14',555374628)", + "valueIsOneOf('D_589588769_14_14',871673221)", + "valueIsOneOf('D_589588769_14_14',198654048)", + "valueIsOneOf('D_807431780_14_14',353358909)", + "equals(D_607773106_14_14,104430631)", + "equals(D_607773106_14_14,353358909)", + "equals(D_607773106_14_14,178420302)", + "15==1", + "15>1", + "equals(isNotDefined(D_406098499_15_15,false),false)", + "doesNotEqual(isNotDefined(D_406098499_15_15,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_15_15,false),false),greaterThan(15,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_15_15,false),false),equals(15,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_15_15,353358909)", + "doesNotEqual(D_890637099_15_15,353358909)", + "equals(D_578895128_15_15,939782495)", + "equals(D_578895128_15_15,135725957)", + "equals(D_578895128_15_15,518416174)", + "equals(D_578895128_15_15,847945207)", + "equals(D_578895128_15_15,283025574)", + "equals(D_578895128_15_15,942970912)", + "equals(D_578895128_15_15,596122041)", + "equals(D_578895128_15_15,489400183)", + "equals(D_578895128_15_15,863246236)", + "equals(D_578895128_15_15,607793249)", + "equals(D_578895128_15_15,532172400)", + "equals(D_578895128_15_15,754745617)", + "equals(D_578895128_15_15,665036297)", + "equals(D_578895128_15_15,200837530)", + "equals(D_578895128_15_15,990319383)", + "equals(D_578895128_15_15,487917585)", + "equals(D_578895128_15_15,603181162)", + "equals(D_578895128_15_15,482225200)", + "equals(D_578895128_15_15,295976386)", + "equals(D_578895128_15_15,764891959)", + "equals(D_578895128_15_15,248374037)", + "equals(D_578895128_15_15,139822395)", + "equals(D_578895128_15_15,723614811)", + "equals(D_578895128_15_15,807835037)", + "exists('D_957429734_15_15')", + "doesNotExist('D_957429734_15_15')", + "equals(D_578895128_15_15,178420302)", + "selectionCount(\"D_578895128_15_15\",true)>0 or valueLength(\"D_957429734_15_15\")>0", + "valueLength('D_406098499_15_15')>0", + "equals(D_579563781_15_15,536341288)", + "equals(D_579563781_15_15,654207589)", + "equals(D_579563781_15_15,178420302)", + "allExist('D_807431780_15_15','D_578895128_15_15')", + "equals(D_807431780_15_15,353358909)", + "equals(D_807431780_15_15,104430631)", + "valueIsOneOf('D_589588769_15_15',555374628)", + "valueIsOneOf('D_589588769_15_15',871673221)", + "valueIsOneOf('D_589588769_15_15',198654048)", + "valueIsOneOf('D_807431780_15_15',353358909)", + "equals(D_607773106_15_15,104430631)", + "equals(D_607773106_15_15,353358909)", + "equals(D_607773106_15_15,178420302)", + "16==1", + "16>1", + "equals(isNotDefined(D_406098499_16_16,false),false)", + "doesNotEqual(isNotDefined(D_406098499_16_16,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_16_16,false),false),greaterThan(16,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_16_16,false),false),equals(16,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_16_16,353358909)", + "doesNotEqual(D_890637099_16_16,353358909)", + "equals(D_578895128_16_16,939782495)", + "equals(D_578895128_16_16,135725957)", + "equals(D_578895128_16_16,518416174)", + "equals(D_578895128_16_16,847945207)", + "equals(D_578895128_16_16,283025574)", + "equals(D_578895128_16_16,942970912)", + "equals(D_578895128_16_16,596122041)", + "equals(D_578895128_16_16,489400183)", + "equals(D_578895128_16_16,863246236)", + "equals(D_578895128_16_16,607793249)", + "equals(D_578895128_16_16,532172400)", + "equals(D_578895128_16_16,754745617)", + "equals(D_578895128_16_16,665036297)", + "equals(D_578895128_16_16,200837530)", + "equals(D_578895128_16_16,990319383)", + "equals(D_578895128_16_16,487917585)", + "equals(D_578895128_16_16,603181162)", + "equals(D_578895128_16_16,482225200)", + "equals(D_578895128_16_16,295976386)", + "equals(D_578895128_16_16,764891959)", + "equals(D_578895128_16_16,248374037)", + "equals(D_578895128_16_16,139822395)", + "equals(D_578895128_16_16,723614811)", + "equals(D_578895128_16_16,807835037)", + "exists('D_957429734_16_16')", + "doesNotExist('D_957429734_16_16')", + "equals(D_578895128_16_16,178420302)", + "selectionCount(\"D_578895128_16_16\",true)>0 or valueLength(\"D_957429734_16_16\")>0", + "valueLength('D_406098499_16_16')>0", + "equals(D_579563781_16_16,536341288)", + "equals(D_579563781_16_16,654207589)", + "equals(D_579563781_16_16,178420302)", + "allExist('D_807431780_16_16','D_578895128_16_16')", + "equals(D_807431780_16_16,353358909)", + "equals(D_807431780_16_16,104430631)", + "valueIsOneOf('D_589588769_16_16',555374628)", + "valueIsOneOf('D_589588769_16_16',871673221)", + "valueIsOneOf('D_589588769_16_16',198654048)", + "valueIsOneOf('D_807431780_16_16',353358909)", + "equals(D_607773106_16_16,104430631)", + "equals(D_607773106_16_16,353358909)", + "equals(D_607773106_16_16,178420302)", + "17==1", + "17>1", + "equals(isNotDefined(D_406098499_17_17,false),false)", + "doesNotEqual(isNotDefined(D_406098499_17_17,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_17_17,false),false),greaterThan(17,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_17_17,false),false),equals(17,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_17_17,353358909)", + "doesNotEqual(D_890637099_17_17,353358909)", + "equals(D_578895128_17_17,939782495)", + "equals(D_578895128_17_17,135725957)", + "equals(D_578895128_17_17,518416174)", + "equals(D_578895128_17_17,847945207)", + "equals(D_578895128_17_17,283025574)", + "equals(D_578895128_17_17,942970912)", + "equals(D_578895128_17_17,596122041)", + "equals(D_578895128_17_17,489400183)", + "equals(D_578895128_17_17,863246236)", + "equals(D_578895128_17_17,607793249)", + "equals(D_578895128_17_17,532172400)", + "equals(D_578895128_17_17,754745617)", + "equals(D_578895128_17_17,665036297)", + "equals(D_578895128_17_17,200837530)", + "equals(D_578895128_17_17,990319383)", + "equals(D_578895128_17_17,487917585)", + "equals(D_578895128_17_17,603181162)", + "equals(D_578895128_17_17,482225200)", + "equals(D_578895128_17_17,295976386)", + "equals(D_578895128_17_17,764891959)", + "equals(D_578895128_17_17,248374037)", + "equals(D_578895128_17_17,139822395)", + "equals(D_578895128_17_17,723614811)", + "equals(D_578895128_17_17,807835037)", + "exists('D_957429734_17_17')", + "doesNotExist('D_957429734_17_17')", + "equals(D_578895128_17_17,178420302)", + "selectionCount(\"D_578895128_17_17\",true)>0 or valueLength(\"D_957429734_17_17\")>0", + "valueLength('D_406098499_17_17')>0", + "equals(D_579563781_17_17,536341288)", + "equals(D_579563781_17_17,654207589)", + "equals(D_579563781_17_17,178420302)", + "allExist('D_807431780_17_17','D_578895128_17_17')", + "equals(D_807431780_17_17,353358909)", + "equals(D_807431780_17_17,104430631)", + "valueIsOneOf('D_589588769_17_17',555374628)", + "valueIsOneOf('D_589588769_17_17',871673221)", + "valueIsOneOf('D_589588769_17_17',198654048)", + "valueIsOneOf('D_807431780_17_17',353358909)", + "equals(D_607773106_17_17,104430631)", + "equals(D_607773106_17_17,353358909)", + "equals(D_607773106_17_17,178420302)", + "18==1", + "18>1", + "equals(isNotDefined(D_406098499_18_18,false),false)", + "doesNotEqual(isNotDefined(D_406098499_18_18,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_18_18,false),false),greaterThan(18,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_18_18,false),false),equals(18,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_18_18,353358909)", + "doesNotEqual(D_890637099_18_18,353358909)", + "equals(D_578895128_18_18,939782495)", + "equals(D_578895128_18_18,135725957)", + "equals(D_578895128_18_18,518416174)", + "equals(D_578895128_18_18,847945207)", + "equals(D_578895128_18_18,283025574)", + "equals(D_578895128_18_18,942970912)", + "equals(D_578895128_18_18,596122041)", + "equals(D_578895128_18_18,489400183)", + "equals(D_578895128_18_18,863246236)", + "equals(D_578895128_18_18,607793249)", + "equals(D_578895128_18_18,532172400)", + "equals(D_578895128_18_18,754745617)", + "equals(D_578895128_18_18,665036297)", + "equals(D_578895128_18_18,200837530)", + "equals(D_578895128_18_18,990319383)", + "equals(D_578895128_18_18,487917585)", + "equals(D_578895128_18_18,603181162)", + "equals(D_578895128_18_18,482225200)", + "equals(D_578895128_18_18,295976386)", + "equals(D_578895128_18_18,764891959)", + "equals(D_578895128_18_18,248374037)", + "equals(D_578895128_18_18,139822395)", + "equals(D_578895128_18_18,723614811)", + "equals(D_578895128_18_18,807835037)", + "exists('D_957429734_18_18')", + "doesNotExist('D_957429734_18_18')", + "equals(D_578895128_18_18,178420302)", + "selectionCount(\"D_578895128_18_18\",true)>0 or valueLength(\"D_957429734_18_18\")>0", + "valueLength('D_406098499_18_18')>0", + "equals(D_579563781_18_18,536341288)", + "equals(D_579563781_18_18,654207589)", + "equals(D_579563781_18_18,178420302)", + "allExist('D_807431780_18_18','D_578895128_18_18')", + "equals(D_807431780_18_18,353358909)", + "equals(D_807431780_18_18,104430631)", + "valueIsOneOf('D_589588769_18_18',555374628)", + "valueIsOneOf('D_589588769_18_18',871673221)", + "valueIsOneOf('D_589588769_18_18',198654048)", + "valueIsOneOf('D_807431780_18_18',353358909)", + "equals(D_607773106_18_18,104430631)", + "equals(D_607773106_18_18,353358909)", + "equals(D_607773106_18_18,178420302)", + "19==1", + "19>1", + "equals(isNotDefined(D_406098499_19_19,false),false)", + "doesNotEqual(isNotDefined(D_406098499_19_19,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_19_19,false),false),greaterThan(19,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_19_19,false),false),equals(19,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_19_19,353358909)", + "doesNotEqual(D_890637099_19_19,353358909)", + "equals(D_578895128_19_19,939782495)", + "equals(D_578895128_19_19,135725957)", + "equals(D_578895128_19_19,518416174)", + "equals(D_578895128_19_19,847945207)", + "equals(D_578895128_19_19,283025574)", + "equals(D_578895128_19_19,942970912)", + "equals(D_578895128_19_19,596122041)", + "equals(D_578895128_19_19,489400183)", + "equals(D_578895128_19_19,863246236)", + "equals(D_578895128_19_19,607793249)", + "equals(D_578895128_19_19,532172400)", + "equals(D_578895128_19_19,754745617)", + "equals(D_578895128_19_19,665036297)", + "equals(D_578895128_19_19,200837530)", + "equals(D_578895128_19_19,990319383)", + "equals(D_578895128_19_19,487917585)", + "equals(D_578895128_19_19,603181162)", + "equals(D_578895128_19_19,482225200)", + "equals(D_578895128_19_19,295976386)", + "equals(D_578895128_19_19,764891959)", + "equals(D_578895128_19_19,248374037)", + "equals(D_578895128_19_19,139822395)", + "equals(D_578895128_19_19,723614811)", + "equals(D_578895128_19_19,807835037)", + "exists('D_957429734_19_19')", + "doesNotExist('D_957429734_19_19')", + "equals(D_578895128_19_19,178420302)", + "selectionCount(\"D_578895128_19_19\",true)>0 or valueLength(\"D_957429734_19_19\")>0", + "valueLength('D_406098499_19_19')>0", + "equals(D_579563781_19_19,536341288)", + "equals(D_579563781_19_19,654207589)", + "equals(D_579563781_19_19,178420302)", + "allExist('D_807431780_19_19','D_578895128_19_19')", + "equals(D_807431780_19_19,353358909)", + "equals(D_807431780_19_19,104430631)", + "valueIsOneOf('D_589588769_19_19',555374628)", + "valueIsOneOf('D_589588769_19_19',871673221)", + "valueIsOneOf('D_589588769_19_19',198654048)", + "valueIsOneOf('D_807431780_19_19',353358909)", + "equals(D_607773106_19_19,104430631)", + "equals(D_607773106_19_19,353358909)", + "equals(D_607773106_19_19,178420302)", + "20==1", + "20>1", + "equals(isNotDefined(D_406098499_20_20,false),false)", + "doesNotEqual(isNotDefined(D_406098499_20_20,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_20_20,false),false),greaterThan(20,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_20_20,false),false),equals(20,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_20_20,353358909)", + "doesNotEqual(D_890637099_20_20,353358909)", + "equals(D_578895128_20_20,939782495)", + "equals(D_578895128_20_20,135725957)", + "equals(D_578895128_20_20,518416174)", + "equals(D_578895128_20_20,847945207)", + "equals(D_578895128_20_20,283025574)", + "equals(D_578895128_20_20,942970912)", + "equals(D_578895128_20_20,596122041)", + "equals(D_578895128_20_20,489400183)", + "equals(D_578895128_20_20,863246236)", + "equals(D_578895128_20_20,607793249)", + "equals(D_578895128_20_20,532172400)", + "equals(D_578895128_20_20,754745617)", + "equals(D_578895128_20_20,665036297)", + "equals(D_578895128_20_20,200837530)", + "equals(D_578895128_20_20,990319383)", + "equals(D_578895128_20_20,487917585)", + "equals(D_578895128_20_20,603181162)", + "equals(D_578895128_20_20,482225200)", + "equals(D_578895128_20_20,295976386)", + "equals(D_578895128_20_20,764891959)", + "equals(D_578895128_20_20,248374037)", + "equals(D_578895128_20_20,139822395)", + "equals(D_578895128_20_20,723614811)", + "equals(D_578895128_20_20,807835037)", + "exists('D_957429734_20_20')", + "doesNotExist('D_957429734_20_20')", + "equals(D_578895128_20_20,178420302)", + "selectionCount(\"D_578895128_20_20\",true)>0 or valueLength(\"D_957429734_20_20\")>0", + "valueLength('D_406098499_20_20')>0", + "equals(D_579563781_20_20,536341288)", + "equals(D_579563781_20_20,654207589)", + "equals(D_579563781_20_20,178420302)", + "allExist('D_807431780_20_20','D_578895128_20_20')", + "equals(D_807431780_20_20,353358909)", + "equals(D_807431780_20_20,104430631)", + "valueIsOneOf('D_589588769_20_20',555374628)", + "valueIsOneOf('D_589588769_20_20',871673221)", + "valueIsOneOf('D_589588769_20_20',198654048)", + "valueIsOneOf('D_807431780_20_20',353358909)", + "equals(D_607773106_20_20,104430631)", + "equals(D_607773106_20_20,353358909)", + "equals(D_607773106_20_20,178420302)", + "21==1", + "21>1", + "equals(isNotDefined(D_406098499_21_21,false),false)", + "doesNotEqual(isNotDefined(D_406098499_21_21,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_21_21,false),false),greaterThan(21,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_21_21,false),false),equals(21,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_21_21,353358909)", + "doesNotEqual(D_890637099_21_21,353358909)", + "equals(D_578895128_21_21,939782495)", + "equals(D_578895128_21_21,135725957)", + "equals(D_578895128_21_21,518416174)", + "equals(D_578895128_21_21,847945207)", + "equals(D_578895128_21_21,283025574)", + "equals(D_578895128_21_21,942970912)", + "equals(D_578895128_21_21,596122041)", + "equals(D_578895128_21_21,489400183)", + "equals(D_578895128_21_21,863246236)", + "equals(D_578895128_21_21,607793249)", + "equals(D_578895128_21_21,532172400)", + "equals(D_578895128_21_21,754745617)", + "equals(D_578895128_21_21,665036297)", + "equals(D_578895128_21_21,200837530)", + "equals(D_578895128_21_21,990319383)", + "equals(D_578895128_21_21,487917585)", + "equals(D_578895128_21_21,603181162)", + "equals(D_578895128_21_21,482225200)", + "equals(D_578895128_21_21,295976386)", + "equals(D_578895128_21_21,764891959)", + "equals(D_578895128_21_21,248374037)", + "equals(D_578895128_21_21,139822395)", + "equals(D_578895128_21_21,723614811)", + "equals(D_578895128_21_21,807835037)", + "exists('D_957429734_21_21')", + "doesNotExist('D_957429734_21_21')", + "equals(D_578895128_21_21,178420302)", + "selectionCount(\"D_578895128_21_21\",true)>0 or valueLength(\"D_957429734_21_21\")>0", + "valueLength('D_406098499_21_21')>0", + "equals(D_579563781_21_21,536341288)", + "equals(D_579563781_21_21,654207589)", + "equals(D_579563781_21_21,178420302)", + "allExist('D_807431780_21_21','D_578895128_21_21')", + "equals(D_807431780_21_21,353358909)", + "equals(D_807431780_21_21,104430631)", + "valueIsOneOf('D_589588769_21_21',555374628)", + "valueIsOneOf('D_589588769_21_21',871673221)", + "valueIsOneOf('D_589588769_21_21',198654048)", + "valueIsOneOf('D_807431780_21_21',353358909)", + "equals(D_607773106_21_21,104430631)", + "equals(D_607773106_21_21,353358909)", + "equals(D_607773106_21_21,178420302)", + "22==1", + "22>1", + "equals(isNotDefined(D_406098499_22_22,false),false)", + "doesNotEqual(isNotDefined(D_406098499_22_22,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_22_22,false),false),greaterThan(22,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_22_22,false),false),equals(22,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_22_22,353358909)", + "doesNotEqual(D_890637099_22_22,353358909)", + "equals(D_578895128_22_22,939782495)", + "equals(D_578895128_22_22,135725957)", + "equals(D_578895128_22_22,518416174)", + "equals(D_578895128_22_22,847945207)", + "equals(D_578895128_22_22,283025574)", + "equals(D_578895128_22_22,942970912)", + "equals(D_578895128_22_22,596122041)", + "equals(D_578895128_22_22,489400183)", + "equals(D_578895128_22_22,863246236)", + "equals(D_578895128_22_22,607793249)", + "equals(D_578895128_22_22,532172400)", + "equals(D_578895128_22_22,754745617)", + "equals(D_578895128_22_22,665036297)", + "equals(D_578895128_22_22,200837530)", + "equals(D_578895128_22_22,990319383)", + "equals(D_578895128_22_22,487917585)", + "equals(D_578895128_22_22,603181162)", + "equals(D_578895128_22_22,482225200)", + "equals(D_578895128_22_22,295976386)", + "equals(D_578895128_22_22,764891959)", + "equals(D_578895128_22_22,248374037)", + "equals(D_578895128_22_22,139822395)", + "equals(D_578895128_22_22,723614811)", + "equals(D_578895128_22_22,807835037)", + "exists('D_957429734_22_22')", + "doesNotExist('D_957429734_22_22')", + "equals(D_578895128_22_22,178420302)", + "selectionCount(\"D_578895128_22_22\",true)>0 or valueLength(\"D_957429734_22_22\")>0", + "valueLength('D_406098499_22_22')>0", + "equals(D_579563781_22_22,536341288)", + "equals(D_579563781_22_22,654207589)", + "equals(D_579563781_22_22,178420302)", + "allExist('D_807431780_22_22','D_578895128_22_22')", + "equals(D_807431780_22_22,353358909)", + "equals(D_807431780_22_22,104430631)", + "valueIsOneOf('D_589588769_22_22',555374628)", + "valueIsOneOf('D_589588769_22_22',871673221)", + "valueIsOneOf('D_589588769_22_22',198654048)", + "valueIsOneOf('D_807431780_22_22',353358909)", + "equals(D_607773106_22_22,104430631)", + "equals(D_607773106_22_22,353358909)", + "equals(D_607773106_22_22,178420302)", + "23==1", + "23>1", + "equals(isNotDefined(D_406098499_23_23,false),false)", + "doesNotEqual(isNotDefined(D_406098499_23_23,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_23_23,false),false),greaterThan(23,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_23_23,false),false),equals(23,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_23_23,353358909)", + "doesNotEqual(D_890637099_23_23,353358909)", + "equals(D_578895128_23_23,939782495)", + "equals(D_578895128_23_23,135725957)", + "equals(D_578895128_23_23,518416174)", + "equals(D_578895128_23_23,847945207)", + "equals(D_578895128_23_23,283025574)", + "equals(D_578895128_23_23,942970912)", + "equals(D_578895128_23_23,596122041)", + "equals(D_578895128_23_23,489400183)", + "equals(D_578895128_23_23,863246236)", + "equals(D_578895128_23_23,607793249)", + "equals(D_578895128_23_23,532172400)", + "equals(D_578895128_23_23,754745617)", + "equals(D_578895128_23_23,665036297)", + "equals(D_578895128_23_23,200837530)", + "equals(D_578895128_23_23,990319383)", + "equals(D_578895128_23_23,487917585)", + "equals(D_578895128_23_23,603181162)", + "equals(D_578895128_23_23,482225200)", + "equals(D_578895128_23_23,295976386)", + "equals(D_578895128_23_23,764891959)", + "equals(D_578895128_23_23,248374037)", + "equals(D_578895128_23_23,139822395)", + "equals(D_578895128_23_23,723614811)", + "equals(D_578895128_23_23,807835037)", + "exists('D_957429734_23_23')", + "doesNotExist('D_957429734_23_23')", + "equals(D_578895128_23_23,178420302)", + "selectionCount(\"D_578895128_23_23\",true)>0 or valueLength(\"D_957429734_23_23\")>0", + "valueLength('D_406098499_23_23')>0", + "equals(D_579563781_23_23,536341288)", + "equals(D_579563781_23_23,654207589)", + "equals(D_579563781_23_23,178420302)", + "allExist('D_807431780_23_23','D_578895128_23_23')", + "equals(D_807431780_23_23,353358909)", + "equals(D_807431780_23_23,104430631)", + "valueIsOneOf('D_589588769_23_23',555374628)", + "valueIsOneOf('D_589588769_23_23',871673221)", + "valueIsOneOf('D_589588769_23_23',198654048)", + "valueIsOneOf('D_807431780_23_23',353358909)", + "equals(D_607773106_23_23,104430631)", + "equals(D_607773106_23_23,353358909)", + "equals(D_607773106_23_23,178420302)", + "24==1", + "24>1", + "equals(isNotDefined(D_406098499_24_24,false),false)", + "doesNotEqual(isNotDefined(D_406098499_24_24,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_24_24,false),false),greaterThan(24,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_24_24,false),false),equals(24,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_24_24,353358909)", + "doesNotEqual(D_890637099_24_24,353358909)", + "equals(D_578895128_24_24,939782495)", + "equals(D_578895128_24_24,135725957)", + "equals(D_578895128_24_24,518416174)", + "equals(D_578895128_24_24,847945207)", + "equals(D_578895128_24_24,283025574)", + "equals(D_578895128_24_24,942970912)", + "equals(D_578895128_24_24,596122041)", + "equals(D_578895128_24_24,489400183)", + "equals(D_578895128_24_24,863246236)", + "equals(D_578895128_24_24,607793249)", + "equals(D_578895128_24_24,532172400)", + "equals(D_578895128_24_24,754745617)", + "equals(D_578895128_24_24,665036297)", + "equals(D_578895128_24_24,200837530)", + "equals(D_578895128_24_24,990319383)", + "equals(D_578895128_24_24,487917585)", + "equals(D_578895128_24_24,603181162)", + "equals(D_578895128_24_24,482225200)", + "equals(D_578895128_24_24,295976386)", + "equals(D_578895128_24_24,764891959)", + "equals(D_578895128_24_24,248374037)", + "equals(D_578895128_24_24,139822395)", + "equals(D_578895128_24_24,723614811)", + "equals(D_578895128_24_24,807835037)", + "exists('D_957429734_24_24')", + "doesNotExist('D_957429734_24_24')", + "equals(D_578895128_24_24,178420302)", + "selectionCount(\"D_578895128_24_24\",true)>0 or valueLength(\"D_957429734_24_24\")>0", + "valueLength('D_406098499_24_24')>0", + "equals(D_579563781_24_24,536341288)", + "equals(D_579563781_24_24,654207589)", + "equals(D_579563781_24_24,178420302)", + "allExist('D_807431780_24_24','D_578895128_24_24')", + "equals(D_807431780_24_24,353358909)", + "equals(D_807431780_24_24,104430631)", + "valueIsOneOf('D_589588769_24_24',555374628)", + "valueIsOneOf('D_589588769_24_24',871673221)", + "valueIsOneOf('D_589588769_24_24',198654048)", + "valueIsOneOf('D_807431780_24_24',353358909)", + "equals(D_607773106_24_24,104430631)", + "equals(D_607773106_24_24,353358909)", + "equals(D_607773106_24_24,178420302)", + "25==1", + "25>1", + "equals(isNotDefined(D_406098499_25_25,false),false)", + "doesNotEqual(isNotDefined(D_406098499_25_25,false),false)", + "and(doesNotEqual(isNotDefined(D_406098499_25_25,false),false),greaterThan(25,1))", + "and(and(doesNotEqual(isNotDefined(D_406098499_25_25,false),false),equals(25,1)),doesNotEqual(D_694265648,1))", + "equals(D_890637099_25_25,353358909)", + "doesNotEqual(D_890637099_25_25,353358909)", + "equals(D_578895128_25_25,939782495)", + "equals(D_578895128_25_25,135725957)", + "equals(D_578895128_25_25,518416174)", + "equals(D_578895128_25_25,847945207)", + "equals(D_578895128_25_25,283025574)", + "equals(D_578895128_25_25,942970912)", + "equals(D_578895128_25_25,596122041)", + "equals(D_578895128_25_25,489400183)", + "equals(D_578895128_25_25,863246236)", + "equals(D_578895128_25_25,607793249)", + "equals(D_578895128_25_25,532172400)", + "equals(D_578895128_25_25,754745617)", + "equals(D_578895128_25_25,665036297)", + "equals(D_578895128_25_25,200837530)", + "equals(D_578895128_25_25,990319383)", + "equals(D_578895128_25_25,487917585)", + "equals(D_578895128_25_25,603181162)", + "equals(D_578895128_25_25,482225200)", + "equals(D_578895128_25_25,295976386)", + "equals(D_578895128_25_25,764891959)", + "equals(D_578895128_25_25,248374037)", + "equals(D_578895128_25_25,139822395)", + "equals(D_578895128_25_25,723614811)", + "equals(D_578895128_25_25,807835037)", + "exists('D_957429734_25_25')", + "doesNotExist('D_957429734_25_25')", + "equals(D_578895128_25_25,178420302)", + "selectionCount(\"D_578895128_25_25\",true)>0 or valueLength(\"D_957429734_25_25\")>0", + "valueLength('D_406098499_25_25')>0", + "equals(D_579563781_25_25,536341288)", + "equals(D_579563781_25_25,654207589)", + "equals(D_579563781_25_25,178420302)", + "allExist('D_807431780_25_25','D_578895128_25_25')", + "equals(D_807431780_25_25,353358909)", + "equals(D_807431780_25_25,104430631)", + "valueIsOneOf('D_589588769_25_25',555374628)", + "valueIsOneOf('D_589588769_25_25',871673221)", + "valueIsOneOf('D_589588769_25_25',198654048)", + "valueIsOneOf('D_807431780_25_25',353358909)", + "equals(D_607773106_25_25,104430631)", + "equals(D_607773106_25_25,353358909)", + "equals(D_607773106_25_25,178420302)", + "isNotDefined(D_446999144,0)", + "or(equals(D_446999144,0),or(isNotDefined(D_446999144,0),greaterThanOrEqual(D_446999144,2)))", + "equals(isNotDefined(D_714001034_1_1,false),false)", + "doesNotEqual(isNotDefined(D_714001034_1_1,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_1_1,false),false),greaterThan(1,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_1_1,false),false),equals(1,1)),doesNotEqual(D_446999144,1))", + "greaterThan(D_446999144,1)", + "equals(D_418392907_1_1,353358909)", + "doesNotEqual(D_418392907_1_1,353358909)", + "equals(D_812370563_1_1,939782495)", + "equals(D_812370563_1_1,135725957)", + "equals(D_812370563_1_1,518416174)", + "equals(D_812370563_1_1,847945207)", + "equals(D_812370563_1_1,283025574)", + "equals(D_812370563_1_1,942970912)", + "equals(D_812370563_1_1,596122041)", + "equals(D_812370563_1_1,489400183)", + "equals(D_812370563_1_1,863246236)", + "equals(D_812370563_1_1,607793249)", + "equals(D_812370563_1_1,532172400)", + "equals(D_812370563_1_1,754745617)", + "equals(D_812370563_1_1,665036297)", + "equals(D_812370563_1_1,200837530)", + "equals(D_812370563_1_1,990319383)", + "equals(D_812370563_1_1,487917585)", + "equals(D_812370563_1_1,603181162)", + "equals(D_812370563_1_1,482225200)", + "equals(D_812370563_1_1,295976386)", + "equals(D_812370563_1_1,764891959)", + "equals(D_812370563_1_1,248374037)", + "equals(D_812370563_1_1,139822395)", + "equals(D_812370563_1_1,723614811)", + "equals(D_812370563_1_1,807835037)", + "valueLength('D_933110091_1_1')>0", + "doesNotExist('D_933110091_1_1')", + "equals(D_812370563_1_1,178420302)", + "selectionCount(\"D_812370563_1_1\",true)>0 or valueLength(\"D_933110091_1_1\")>0", + "valueLength('D_714001034_1_1')>0", + "equals(D_887697329_1_1,536341288)", + "equals(D_887697329_1_1,654207589)", + "equals(D_887697329_1_1,178420302)", + "allExist('D_473529484_1_1','D_812370563_1_1')", + "equals(D_473529484_1_1,353358909)", + "equals(D_473529484_1_1,104430631)", + "equals(D_873968217_1_1,709650750)", + "equals(D_873968217_1_1,810290359)", + "equals(D_873968217_1_1,509607548)", + "equals(D_873968217_1_1,784922042)", + "equals(D_718867914_1_1,104430631)", + "equals(D_718867914_1_1,353358909)", + "equals(D_718867914_1_1,178420302)", + "equals(isNotDefined(D_714001034_2_2,false),false)", + "doesNotEqual(isNotDefined(D_714001034_2_2,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_2_2,false),false),greaterThan(2,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_2_2,false),false),equals(2,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_2_2,353358909)", + "doesNotEqual(D_418392907_2_2,353358909)", + "equals(D_812370563_2_2,939782495)", + "equals(D_812370563_2_2,135725957)", + "equals(D_812370563_2_2,518416174)", + "equals(D_812370563_2_2,847945207)", + "equals(D_812370563_2_2,283025574)", + "equals(D_812370563_2_2,942970912)", + "equals(D_812370563_2_2,596122041)", + "equals(D_812370563_2_2,489400183)", + "equals(D_812370563_2_2,863246236)", + "equals(D_812370563_2_2,607793249)", + "equals(D_812370563_2_2,532172400)", + "equals(D_812370563_2_2,754745617)", + "equals(D_812370563_2_2,665036297)", + "equals(D_812370563_2_2,200837530)", + "equals(D_812370563_2_2,990319383)", + "equals(D_812370563_2_2,487917585)", + "equals(D_812370563_2_2,603181162)", + "equals(D_812370563_2_2,482225200)", + "equals(D_812370563_2_2,295976386)", + "equals(D_812370563_2_2,764891959)", + "equals(D_812370563_2_2,248374037)", + "equals(D_812370563_2_2,139822395)", + "equals(D_812370563_2_2,723614811)", + "equals(D_812370563_2_2,807835037)", + "valueLength('D_933110091_2_2')>0", + "doesNotExist('D_933110091_2_2')", + "equals(D_812370563_2_2,178420302)", + "selectionCount(\"D_812370563_2_2\",true)>0 or valueLength(\"D_933110091_2_2\")>0", + "valueLength('D_714001034_2_2')>0", + "equals(D_887697329_2_2,536341288)", + "equals(D_887697329_2_2,654207589)", + "equals(D_887697329_2_2,178420302)", + "allExist('D_473529484_2_2','D_812370563_2_2')", + "equals(D_473529484_2_2,353358909)", + "equals(D_473529484_2_2,104430631)", + "equals(D_873968217_2_2,709650750)", + "equals(D_873968217_2_2,810290359)", + "equals(D_873968217_2_2,509607548)", + "equals(D_873968217_2_2,784922042)", + "equals(D_718867914_2_2,104430631)", + "equals(D_718867914_2_2,353358909)", + "equals(D_718867914_2_2,178420302)", + "equals(isNotDefined(D_714001034_3_3,false),false)", + "doesNotEqual(isNotDefined(D_714001034_3_3,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_3_3,false),false),greaterThan(3,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_3_3,false),false),equals(3,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_3_3,353358909)", + "doesNotEqual(D_418392907_3_3,353358909)", + "equals(D_812370563_3_3,939782495)", + "equals(D_812370563_3_3,135725957)", + "equals(D_812370563_3_3,518416174)", + "equals(D_812370563_3_3,847945207)", + "equals(D_812370563_3_3,283025574)", + "equals(D_812370563_3_3,942970912)", + "equals(D_812370563_3_3,596122041)", + "equals(D_812370563_3_3,489400183)", + "equals(D_812370563_3_3,863246236)", + "equals(D_812370563_3_3,607793249)", + "equals(D_812370563_3_3,532172400)", + "equals(D_812370563_3_3,754745617)", + "equals(D_812370563_3_3,665036297)", + "equals(D_812370563_3_3,200837530)", + "equals(D_812370563_3_3,990319383)", + "equals(D_812370563_3_3,487917585)", + "equals(D_812370563_3_3,603181162)", + "equals(D_812370563_3_3,482225200)", + "equals(D_812370563_3_3,295976386)", + "equals(D_812370563_3_3,764891959)", + "equals(D_812370563_3_3,248374037)", + "equals(D_812370563_3_3,139822395)", + "equals(D_812370563_3_3,723614811)", + "equals(D_812370563_3_3,807835037)", + "valueLength('D_933110091_3_3')>0", + "doesNotExist('D_933110091_3_3')", + "equals(D_812370563_3_3,178420302)", + "selectionCount(\"D_812370563_3_3\",true)>0 or valueLength(\"D_933110091_3_3\")>0", + "valueLength('D_714001034_3_3')>0", + "equals(D_887697329_3_3,536341288)", + "equals(D_887697329_3_3,654207589)", + "equals(D_887697329_3_3,178420302)", + "allExist('D_473529484_3_3','D_812370563_3_3')", + "equals(D_473529484_3_3,353358909)", + "equals(D_473529484_3_3,104430631)", + "equals(D_873968217_3_3,709650750)", + "equals(D_873968217_3_3,810290359)", + "equals(D_873968217_3_3,509607548)", + "equals(D_873968217_3_3,784922042)", + "equals(D_718867914_3_3,104430631)", + "equals(D_718867914_3_3,353358909)", + "equals(D_718867914_3_3,178420302)", + "equals(isNotDefined(D_714001034_4_4,false),false)", + "doesNotEqual(isNotDefined(D_714001034_4_4,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_4_4,false),false),greaterThan(4,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_4_4,false),false),equals(4,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_4_4,353358909)", + "doesNotEqual(D_418392907_4_4,353358909)", + "equals(D_812370563_4_4,939782495)", + "equals(D_812370563_4_4,135725957)", + "equals(D_812370563_4_4,518416174)", + "equals(D_812370563_4_4,847945207)", + "equals(D_812370563_4_4,283025574)", + "equals(D_812370563_4_4,942970912)", + "equals(D_812370563_4_4,596122041)", + "equals(D_812370563_4_4,489400183)", + "equals(D_812370563_4_4,863246236)", + "equals(D_812370563_4_4,607793249)", + "equals(D_812370563_4_4,532172400)", + "equals(D_812370563_4_4,754745617)", + "equals(D_812370563_4_4,665036297)", + "equals(D_812370563_4_4,200837530)", + "equals(D_812370563_4_4,990319383)", + "equals(D_812370563_4_4,487917585)", + "equals(D_812370563_4_4,603181162)", + "equals(D_812370563_4_4,482225200)", + "equals(D_812370563_4_4,295976386)", + "equals(D_812370563_4_4,764891959)", + "equals(D_812370563_4_4,248374037)", + "equals(D_812370563_4_4,139822395)", + "equals(D_812370563_4_4,723614811)", + "equals(D_812370563_4_4,807835037)", + "valueLength('D_933110091_4_4')>0", + "doesNotExist('D_933110091_4_4')", + "equals(D_812370563_4_4,178420302)", + "selectionCount(\"D_812370563_4_4\",true)>0 or valueLength(\"D_933110091_4_4\")>0", + "valueLength('D_714001034_4_4')>0", + "equals(D_887697329_4_4,536341288)", + "equals(D_887697329_4_4,654207589)", + "equals(D_887697329_4_4,178420302)", + "allExist('D_473529484_4_4','D_812370563_4_4')", + "equals(D_473529484_4_4,353358909)", + "equals(D_473529484_4_4,104430631)", + "equals(D_873968217_4_4,709650750)", + "equals(D_873968217_4_4,810290359)", + "equals(D_873968217_4_4,509607548)", + "equals(D_873968217_4_4,784922042)", + "equals(D_718867914_4_4,104430631)", + "equals(D_718867914_4_4,353358909)", + "equals(D_718867914_4_4,178420302)", + "equals(isNotDefined(D_714001034_5_5,false),false)", + "doesNotEqual(isNotDefined(D_714001034_5_5,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_5_5,false),false),greaterThan(5,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_5_5,false),false),equals(5,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_5_5,353358909)", + "doesNotEqual(D_418392907_5_5,353358909)", + "equals(D_812370563_5_5,939782495)", + "equals(D_812370563_5_5,135725957)", + "equals(D_812370563_5_5,518416174)", + "equals(D_812370563_5_5,847945207)", + "equals(D_812370563_5_5,283025574)", + "equals(D_812370563_5_5,942970912)", + "equals(D_812370563_5_5,596122041)", + "equals(D_812370563_5_5,489400183)", + "equals(D_812370563_5_5,863246236)", + "equals(D_812370563_5_5,607793249)", + "equals(D_812370563_5_5,532172400)", + "equals(D_812370563_5_5,754745617)", + "equals(D_812370563_5_5,665036297)", + "equals(D_812370563_5_5,200837530)", + "equals(D_812370563_5_5,990319383)", + "equals(D_812370563_5_5,487917585)", + "equals(D_812370563_5_5,603181162)", + "equals(D_812370563_5_5,482225200)", + "equals(D_812370563_5_5,295976386)", + "equals(D_812370563_5_5,764891959)", + "equals(D_812370563_5_5,248374037)", + "equals(D_812370563_5_5,139822395)", + "equals(D_812370563_5_5,723614811)", + "equals(D_812370563_5_5,807835037)", + "valueLength('D_933110091_5_5')>0", + "doesNotExist('D_933110091_5_5')", + "equals(D_812370563_5_5,178420302)", + "selectionCount(\"D_812370563_5_5\",true)>0 or valueLength(\"D_933110091_5_5\")>0", + "valueLength('D_714001034_5_5')>0", + "equals(D_887697329_5_5,536341288)", + "equals(D_887697329_5_5,654207589)", + "equals(D_887697329_5_5,178420302)", + "allExist('D_473529484_5_5','D_812370563_5_5')", + "equals(D_473529484_5_5,353358909)", + "equals(D_473529484_5_5,104430631)", + "equals(D_873968217_5_5,709650750)", + "equals(D_873968217_5_5,810290359)", + "equals(D_873968217_5_5,509607548)", + "equals(D_873968217_5_5,784922042)", + "equals(D_718867914_5_5,104430631)", + "equals(D_718867914_5_5,353358909)", + "equals(D_718867914_5_5,178420302)", + "equals(isNotDefined(D_714001034_6_6,false),false)", + "doesNotEqual(isNotDefined(D_714001034_6_6,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_6_6,false),false),greaterThan(6,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_6_6,false),false),equals(6,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_6_6,353358909)", + "doesNotEqual(D_418392907_6_6,353358909)", + "equals(D_812370563_6_6,939782495)", + "equals(D_812370563_6_6,135725957)", + "equals(D_812370563_6_6,518416174)", + "equals(D_812370563_6_6,847945207)", + "equals(D_812370563_6_6,283025574)", + "equals(D_812370563_6_6,942970912)", + "equals(D_812370563_6_6,596122041)", + "equals(D_812370563_6_6,489400183)", + "equals(D_812370563_6_6,863246236)", + "equals(D_812370563_6_6,607793249)", + "equals(D_812370563_6_6,532172400)", + "equals(D_812370563_6_6,754745617)", + "equals(D_812370563_6_6,665036297)", + "equals(D_812370563_6_6,200837530)", + "equals(D_812370563_6_6,990319383)", + "equals(D_812370563_6_6,487917585)", + "equals(D_812370563_6_6,603181162)", + "equals(D_812370563_6_6,482225200)", + "equals(D_812370563_6_6,295976386)", + "equals(D_812370563_6_6,764891959)", + "equals(D_812370563_6_6,248374037)", + "equals(D_812370563_6_6,139822395)", + "equals(D_812370563_6_6,723614811)", + "equals(D_812370563_6_6,807835037)", + "valueLength('D_933110091_6_6')>0", + "doesNotExist('D_933110091_6_6')", + "equals(D_812370563_6_6,178420302)", + "selectionCount(\"D_812370563_6_6\",true)>0 or valueLength(\"D_933110091_6_6\")>0", + "valueLength('D_714001034_6_6')>0", + "equals(D_887697329_6_6,536341288)", + "equals(D_887697329_6_6,654207589)", + "equals(D_887697329_6_6,178420302)", + "allExist('D_473529484_6_6','D_812370563_6_6')", + "equals(D_473529484_6_6,353358909)", + "equals(D_473529484_6_6,104430631)", + "equals(D_873968217_6_6,709650750)", + "equals(D_873968217_6_6,810290359)", + "equals(D_873968217_6_6,509607548)", + "equals(D_873968217_6_6,784922042)", + "equals(D_718867914_6_6,104430631)", + "equals(D_718867914_6_6,353358909)", + "equals(D_718867914_6_6,178420302)", + "equals(isNotDefined(D_714001034_7_7,false),false)", + "doesNotEqual(isNotDefined(D_714001034_7_7,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_7_7,false),false),greaterThan(7,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_7_7,false),false),equals(7,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_7_7,353358909)", + "doesNotEqual(D_418392907_7_7,353358909)", + "equals(D_812370563_7_7,939782495)", + "equals(D_812370563_7_7,135725957)", + "equals(D_812370563_7_7,518416174)", + "equals(D_812370563_7_7,847945207)", + "equals(D_812370563_7_7,283025574)", + "equals(D_812370563_7_7,942970912)", + "equals(D_812370563_7_7,596122041)", + "equals(D_812370563_7_7,489400183)", + "equals(D_812370563_7_7,863246236)", + "equals(D_812370563_7_7,607793249)", + "equals(D_812370563_7_7,532172400)", + "equals(D_812370563_7_7,754745617)", + "equals(D_812370563_7_7,665036297)", + "equals(D_812370563_7_7,200837530)", + "equals(D_812370563_7_7,990319383)", + "equals(D_812370563_7_7,487917585)", + "equals(D_812370563_7_7,603181162)", + "equals(D_812370563_7_7,482225200)", + "equals(D_812370563_7_7,295976386)", + "equals(D_812370563_7_7,764891959)", + "equals(D_812370563_7_7,248374037)", + "equals(D_812370563_7_7,139822395)", + "equals(D_812370563_7_7,723614811)", + "equals(D_812370563_7_7,807835037)", + "valueLength('D_933110091_7_7')>0", + "doesNotExist('D_933110091_7_7')", + "equals(D_812370563_7_7,178420302)", + "selectionCount(\"D_812370563_7_7\",true)>0 or valueLength(\"D_933110091_7_7\")>0", + "valueLength('D_714001034_7_7')>0", + "equals(D_887697329_7_7,536341288)", + "equals(D_887697329_7_7,654207589)", + "equals(D_887697329_7_7,178420302)", + "allExist('D_473529484_7_7','D_812370563_7_7')", + "equals(D_473529484_7_7,353358909)", + "equals(D_473529484_7_7,104430631)", + "equals(D_873968217_7_7,709650750)", + "equals(D_873968217_7_7,810290359)", + "equals(D_873968217_7_7,509607548)", + "equals(D_873968217_7_7,784922042)", + "equals(D_718867914_7_7,104430631)", + "equals(D_718867914_7_7,353358909)", + "equals(D_718867914_7_7,178420302)", + "equals(isNotDefined(D_714001034_8_8,false),false)", + "doesNotEqual(isNotDefined(D_714001034_8_8,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_8_8,false),false),greaterThan(8,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_8_8,false),false),equals(8,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_8_8,353358909)", + "doesNotEqual(D_418392907_8_8,353358909)", + "equals(D_812370563_8_8,939782495)", + "equals(D_812370563_8_8,135725957)", + "equals(D_812370563_8_8,518416174)", + "equals(D_812370563_8_8,847945207)", + "equals(D_812370563_8_8,283025574)", + "equals(D_812370563_8_8,942970912)", + "equals(D_812370563_8_8,596122041)", + "equals(D_812370563_8_8,489400183)", + "equals(D_812370563_8_8,863246236)", + "equals(D_812370563_8_8,607793249)", + "equals(D_812370563_8_8,532172400)", + "equals(D_812370563_8_8,754745617)", + "equals(D_812370563_8_8,665036297)", + "equals(D_812370563_8_8,200837530)", + "equals(D_812370563_8_8,990319383)", + "equals(D_812370563_8_8,487917585)", + "equals(D_812370563_8_8,603181162)", + "equals(D_812370563_8_8,482225200)", + "equals(D_812370563_8_8,295976386)", + "equals(D_812370563_8_8,764891959)", + "equals(D_812370563_8_8,248374037)", + "equals(D_812370563_8_8,139822395)", + "equals(D_812370563_8_8,723614811)", + "equals(D_812370563_8_8,807835037)", + "valueLength('D_933110091_8_8')>0", + "doesNotExist('D_933110091_8_8')", + "equals(D_812370563_8_8,178420302)", + "selectionCount(\"D_812370563_8_8\",true)>0 or valueLength(\"D_933110091_8_8\")>0", + "valueLength('D_714001034_8_8')>0", + "equals(D_887697329_8_8,536341288)", + "equals(D_887697329_8_8,654207589)", + "equals(D_887697329_8_8,178420302)", + "allExist('D_473529484_8_8','D_812370563_8_8')", + "equals(D_473529484_8_8,353358909)", + "equals(D_473529484_8_8,104430631)", + "equals(D_873968217_8_8,709650750)", + "equals(D_873968217_8_8,810290359)", + "equals(D_873968217_8_8,509607548)", + "equals(D_873968217_8_8,784922042)", + "equals(D_718867914_8_8,104430631)", + "equals(D_718867914_8_8,353358909)", + "equals(D_718867914_8_8,178420302)", + "equals(isNotDefined(D_714001034_9_9,false),false)", + "doesNotEqual(isNotDefined(D_714001034_9_9,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_9_9,false),false),greaterThan(9,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_9_9,false),false),equals(9,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_9_9,353358909)", + "doesNotEqual(D_418392907_9_9,353358909)", + "equals(D_812370563_9_9,939782495)", + "equals(D_812370563_9_9,135725957)", + "equals(D_812370563_9_9,518416174)", + "equals(D_812370563_9_9,847945207)", + "equals(D_812370563_9_9,283025574)", + "equals(D_812370563_9_9,942970912)", + "equals(D_812370563_9_9,596122041)", + "equals(D_812370563_9_9,489400183)", + "equals(D_812370563_9_9,863246236)", + "equals(D_812370563_9_9,607793249)", + "equals(D_812370563_9_9,532172400)", + "equals(D_812370563_9_9,754745617)", + "equals(D_812370563_9_9,665036297)", + "equals(D_812370563_9_9,200837530)", + "equals(D_812370563_9_9,990319383)", + "equals(D_812370563_9_9,487917585)", + "equals(D_812370563_9_9,603181162)", + "equals(D_812370563_9_9,482225200)", + "equals(D_812370563_9_9,295976386)", + "equals(D_812370563_9_9,764891959)", + "equals(D_812370563_9_9,248374037)", + "equals(D_812370563_9_9,139822395)", + "equals(D_812370563_9_9,723614811)", + "equals(D_812370563_9_9,807835037)", + "valueLength('D_933110091_9_9')>0", + "doesNotExist('D_933110091_9_9')", + "equals(D_812370563_9_9,178420302)", + "selectionCount(\"D_812370563_9_9\",true)>0 or valueLength(\"D_933110091_9_9\")>0", + "valueLength('D_714001034_9_9')>0", + "equals(D_887697329_9_9,536341288)", + "equals(D_887697329_9_9,654207589)", + "equals(D_887697329_9_9,178420302)", + "allExist('D_473529484_9_9','D_812370563_9_9')", + "equals(D_473529484_9_9,353358909)", + "equals(D_473529484_9_9,104430631)", + "equals(D_873968217_9_9,709650750)", + "equals(D_873968217_9_9,810290359)", + "equals(D_873968217_9_9,509607548)", + "equals(D_873968217_9_9,784922042)", + "equals(D_718867914_9_9,104430631)", + "equals(D_718867914_9_9,353358909)", + "equals(D_718867914_9_9,178420302)", + "equals(isNotDefined(D_714001034_10_10,false),false)", + "doesNotEqual(isNotDefined(D_714001034_10_10,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_10_10,false),false),greaterThan(10,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_10_10,false),false),equals(10,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_10_10,353358909)", + "doesNotEqual(D_418392907_10_10,353358909)", + "equals(D_812370563_10_10,939782495)", + "equals(D_812370563_10_10,135725957)", + "equals(D_812370563_10_10,518416174)", + "equals(D_812370563_10_10,847945207)", + "equals(D_812370563_10_10,283025574)", + "equals(D_812370563_10_10,942970912)", + "equals(D_812370563_10_10,596122041)", + "equals(D_812370563_10_10,489400183)", + "equals(D_812370563_10_10,863246236)", + "equals(D_812370563_10_10,607793249)", + "equals(D_812370563_10_10,532172400)", + "equals(D_812370563_10_10,754745617)", + "equals(D_812370563_10_10,665036297)", + "equals(D_812370563_10_10,200837530)", + "equals(D_812370563_10_10,990319383)", + "equals(D_812370563_10_10,487917585)", + "equals(D_812370563_10_10,603181162)", + "equals(D_812370563_10_10,482225200)", + "equals(D_812370563_10_10,295976386)", + "equals(D_812370563_10_10,764891959)", + "equals(D_812370563_10_10,248374037)", + "equals(D_812370563_10_10,139822395)", + "equals(D_812370563_10_10,723614811)", + "equals(D_812370563_10_10,807835037)", + "valueLength('D_933110091_10_10')>0", + "doesNotExist('D_933110091_10_10')", + "equals(D_812370563_10_10,178420302)", + "selectionCount(\"D_812370563_10_10\",true)>0 or valueLength(\"D_933110091_10_10\")>0", + "valueLength('D_714001034_10_10')>0", + "equals(D_887697329_10_10,536341288)", + "equals(D_887697329_10_10,654207589)", + "equals(D_887697329_10_10,178420302)", + "allExist('D_473529484_10_10','D_812370563_10_10')", + "equals(D_473529484_10_10,353358909)", + "equals(D_473529484_10_10,104430631)", + "equals(D_873968217_10_10,709650750)", + "equals(D_873968217_10_10,810290359)", + "equals(D_873968217_10_10,509607548)", + "equals(D_873968217_10_10,784922042)", + "equals(D_718867914_10_10,104430631)", + "equals(D_718867914_10_10,353358909)", + "equals(D_718867914_10_10,178420302)", + "equals(isNotDefined(D_714001034_11_11,false),false)", + "doesNotEqual(isNotDefined(D_714001034_11_11,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_11_11,false),false),greaterThan(11,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_11_11,false),false),equals(11,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_11_11,353358909)", + "doesNotEqual(D_418392907_11_11,353358909)", + "equals(D_812370563_11_11,939782495)", + "equals(D_812370563_11_11,135725957)", + "equals(D_812370563_11_11,518416174)", + "equals(D_812370563_11_11,847945207)", + "equals(D_812370563_11_11,283025574)", + "equals(D_812370563_11_11,942970912)", + "equals(D_812370563_11_11,596122041)", + "equals(D_812370563_11_11,489400183)", + "equals(D_812370563_11_11,863246236)", + "equals(D_812370563_11_11,607793249)", + "equals(D_812370563_11_11,532172400)", + "equals(D_812370563_11_11,754745617)", + "equals(D_812370563_11_11,665036297)", + "equals(D_812370563_11_11,200837530)", + "equals(D_812370563_11_11,990319383)", + "equals(D_812370563_11_11,487917585)", + "equals(D_812370563_11_11,603181162)", + "equals(D_812370563_11_11,482225200)", + "equals(D_812370563_11_11,295976386)", + "equals(D_812370563_11_11,764891959)", + "equals(D_812370563_11_11,248374037)", + "equals(D_812370563_11_11,139822395)", + "equals(D_812370563_11_11,723614811)", + "equals(D_812370563_11_11,807835037)", + "valueLength('D_933110091_11_11')>0", + "doesNotExist('D_933110091_11_11')", + "equals(D_812370563_11_11,178420302)", + "selectionCount(\"D_812370563_11_11\",true)>0 or valueLength(\"D_933110091_11_11\")>0", + "valueLength('D_714001034_11_11')>0", + "equals(D_887697329_11_11,536341288)", + "equals(D_887697329_11_11,654207589)", + "equals(D_887697329_11_11,178420302)", + "allExist('D_473529484_11_11','D_812370563_11_11')", + "equals(D_473529484_11_11,353358909)", + "equals(D_473529484_11_11,104430631)", + "equals(D_873968217_11_11,709650750)", + "equals(D_873968217_11_11,810290359)", + "equals(D_873968217_11_11,509607548)", + "equals(D_873968217_11_11,784922042)", + "equals(D_718867914_11_11,104430631)", + "equals(D_718867914_11_11,353358909)", + "equals(D_718867914_11_11,178420302)", + "equals(isNotDefined(D_714001034_12_12,false),false)", + "doesNotEqual(isNotDefined(D_714001034_12_12,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_12_12,false),false),greaterThan(12,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_12_12,false),false),equals(12,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_12_12,353358909)", + "doesNotEqual(D_418392907_12_12,353358909)", + "equals(D_812370563_12_12,939782495)", + "equals(D_812370563_12_12,135725957)", + "equals(D_812370563_12_12,518416174)", + "equals(D_812370563_12_12,847945207)", + "equals(D_812370563_12_12,283025574)", + "equals(D_812370563_12_12,942970912)", + "equals(D_812370563_12_12,596122041)", + "equals(D_812370563_12_12,489400183)", + "equals(D_812370563_12_12,863246236)", + "equals(D_812370563_12_12,607793249)", + "equals(D_812370563_12_12,532172400)", + "equals(D_812370563_12_12,754745617)", + "equals(D_812370563_12_12,665036297)", + "equals(D_812370563_12_12,200837530)", + "equals(D_812370563_12_12,990319383)", + "equals(D_812370563_12_12,487917585)", + "equals(D_812370563_12_12,603181162)", + "equals(D_812370563_12_12,482225200)", + "equals(D_812370563_12_12,295976386)", + "equals(D_812370563_12_12,764891959)", + "equals(D_812370563_12_12,248374037)", + "equals(D_812370563_12_12,139822395)", + "equals(D_812370563_12_12,723614811)", + "equals(D_812370563_12_12,807835037)", + "valueLength('D_933110091_12_12')>0", + "doesNotExist('D_933110091_12_12')", + "equals(D_812370563_12_12,178420302)", + "selectionCount(\"D_812370563_12_12\",true)>0 or valueLength(\"D_933110091_12_12\")>0", + "valueLength('D_714001034_12_12')>0", + "equals(D_887697329_12_12,536341288)", + "equals(D_887697329_12_12,654207589)", + "equals(D_887697329_12_12,178420302)", + "allExist('D_473529484_12_12','D_812370563_12_12')", + "equals(D_473529484_12_12,353358909)", + "equals(D_473529484_12_12,104430631)", + "equals(D_873968217_12_12,709650750)", + "equals(D_873968217_12_12,810290359)", + "equals(D_873968217_12_12,509607548)", + "equals(D_873968217_12_12,784922042)", + "equals(D_718867914_12_12,104430631)", + "equals(D_718867914_12_12,353358909)", + "equals(D_718867914_12_12,178420302)", + "equals(isNotDefined(D_714001034_13_13,false),false)", + "doesNotEqual(isNotDefined(D_714001034_13_13,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_13_13,false),false),greaterThan(13,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_13_13,false),false),equals(13,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_13_13,353358909)", + "doesNotEqual(D_418392907_13_13,353358909)", + "equals(D_812370563_13_13,939782495)", + "equals(D_812370563_13_13,135725957)", + "equals(D_812370563_13_13,518416174)", + "equals(D_812370563_13_13,847945207)", + "equals(D_812370563_13_13,283025574)", + "equals(D_812370563_13_13,942970912)", + "equals(D_812370563_13_13,596122041)", + "equals(D_812370563_13_13,489400183)", + "equals(D_812370563_13_13,863246236)", + "equals(D_812370563_13_13,607793249)", + "equals(D_812370563_13_13,532172400)", + "equals(D_812370563_13_13,754745617)", + "equals(D_812370563_13_13,665036297)", + "equals(D_812370563_13_13,200837530)", + "equals(D_812370563_13_13,990319383)", + "equals(D_812370563_13_13,487917585)", + "equals(D_812370563_13_13,603181162)", + "equals(D_812370563_13_13,482225200)", + "equals(D_812370563_13_13,295976386)", + "equals(D_812370563_13_13,764891959)", + "equals(D_812370563_13_13,248374037)", + "equals(D_812370563_13_13,139822395)", + "equals(D_812370563_13_13,723614811)", + "equals(D_812370563_13_13,807835037)", + "valueLength('D_933110091_13_13')>0", + "doesNotExist('D_933110091_13_13')", + "equals(D_812370563_13_13,178420302)", + "selectionCount(\"D_812370563_13_13\",true)>0 or valueLength(\"D_933110091_13_13\")>0", + "valueLength('D_714001034_13_13')>0", + "equals(D_887697329_13_13,536341288)", + "equals(D_887697329_13_13,654207589)", + "equals(D_887697329_13_13,178420302)", + "allExist('D_473529484_13_13','D_812370563_13_13')", + "equals(D_473529484_13_13,353358909)", + "equals(D_473529484_13_13,104430631)", + "equals(D_873968217_13_13,709650750)", + "equals(D_873968217_13_13,810290359)", + "equals(D_873968217_13_13,509607548)", + "equals(D_873968217_13_13,784922042)", + "equals(D_718867914_13_13,104430631)", + "equals(D_718867914_13_13,353358909)", + "equals(D_718867914_13_13,178420302)", + "equals(isNotDefined(D_714001034_14_14,false),false)", + "doesNotEqual(isNotDefined(D_714001034_14_14,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_14_14,false),false),greaterThan(14,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_14_14,false),false),equals(14,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_14_14,353358909)", + "doesNotEqual(D_418392907_14_14,353358909)", + "equals(D_812370563_14_14,939782495)", + "equals(D_812370563_14_14,135725957)", + "equals(D_812370563_14_14,518416174)", + "equals(D_812370563_14_14,847945207)", + "equals(D_812370563_14_14,283025574)", + "equals(D_812370563_14_14,942970912)", + "equals(D_812370563_14_14,596122041)", + "equals(D_812370563_14_14,489400183)", + "equals(D_812370563_14_14,863246236)", + "equals(D_812370563_14_14,607793249)", + "equals(D_812370563_14_14,532172400)", + "equals(D_812370563_14_14,754745617)", + "equals(D_812370563_14_14,665036297)", + "equals(D_812370563_14_14,200837530)", + "equals(D_812370563_14_14,990319383)", + "equals(D_812370563_14_14,487917585)", + "equals(D_812370563_14_14,603181162)", + "equals(D_812370563_14_14,482225200)", + "equals(D_812370563_14_14,295976386)", + "equals(D_812370563_14_14,764891959)", + "equals(D_812370563_14_14,248374037)", + "equals(D_812370563_14_14,139822395)", + "equals(D_812370563_14_14,723614811)", + "equals(D_812370563_14_14,807835037)", + "valueLength('D_933110091_14_14')>0", + "doesNotExist('D_933110091_14_14')", + "equals(D_812370563_14_14,178420302)", + "selectionCount(\"D_812370563_14_14\",true)>0 or valueLength(\"D_933110091_14_14\")>0", + "valueLength('D_714001034_14_14')>0", + "equals(D_887697329_14_14,536341288)", + "equals(D_887697329_14_14,654207589)", + "equals(D_887697329_14_14,178420302)", + "allExist('D_473529484_14_14','D_812370563_14_14')", + "equals(D_473529484_14_14,353358909)", + "equals(D_473529484_14_14,104430631)", + "equals(D_873968217_14_14,709650750)", + "equals(D_873968217_14_14,810290359)", + "equals(D_873968217_14_14,509607548)", + "equals(D_873968217_14_14,784922042)", + "equals(D_718867914_14_14,104430631)", + "equals(D_718867914_14_14,353358909)", + "equals(D_718867914_14_14,178420302)", + "equals(isNotDefined(D_714001034_15_15,false),false)", + "doesNotEqual(isNotDefined(D_714001034_15_15,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_15_15,false),false),greaterThan(15,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_15_15,false),false),equals(15,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_15_15,353358909)", + "doesNotEqual(D_418392907_15_15,353358909)", + "equals(D_812370563_15_15,939782495)", + "equals(D_812370563_15_15,135725957)", + "equals(D_812370563_15_15,518416174)", + "equals(D_812370563_15_15,847945207)", + "equals(D_812370563_15_15,283025574)", + "equals(D_812370563_15_15,942970912)", + "equals(D_812370563_15_15,596122041)", + "equals(D_812370563_15_15,489400183)", + "equals(D_812370563_15_15,863246236)", + "equals(D_812370563_15_15,607793249)", + "equals(D_812370563_15_15,532172400)", + "equals(D_812370563_15_15,754745617)", + "equals(D_812370563_15_15,665036297)", + "equals(D_812370563_15_15,200837530)", + "equals(D_812370563_15_15,990319383)", + "equals(D_812370563_15_15,487917585)", + "equals(D_812370563_15_15,603181162)", + "equals(D_812370563_15_15,482225200)", + "equals(D_812370563_15_15,295976386)", + "equals(D_812370563_15_15,764891959)", + "equals(D_812370563_15_15,248374037)", + "equals(D_812370563_15_15,139822395)", + "equals(D_812370563_15_15,723614811)", + "equals(D_812370563_15_15,807835037)", + "valueLength('D_933110091_15_15')>0", + "doesNotExist('D_933110091_15_15')", + "equals(D_812370563_15_15,178420302)", + "selectionCount(\"D_812370563_15_15\",true)>0 or valueLength(\"D_933110091_15_15\")>0", + "valueLength('D_714001034_15_15')>0", + "equals(D_887697329_15_15,536341288)", + "equals(D_887697329_15_15,654207589)", + "equals(D_887697329_15_15,178420302)", + "allExist('D_473529484_15_15','D_812370563_15_15')", + "equals(D_473529484_15_15,353358909)", + "equals(D_473529484_15_15,104430631)", + "equals(D_873968217_15_15,709650750)", + "equals(D_873968217_15_15,810290359)", + "equals(D_873968217_15_15,509607548)", + "equals(D_873968217_15_15,784922042)", + "equals(D_718867914_15_15,104430631)", + "equals(D_718867914_15_15,353358909)", + "equals(D_718867914_15_15,178420302)", + "equals(isNotDefined(D_714001034_16_16,false),false)", + "doesNotEqual(isNotDefined(D_714001034_16_16,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_16_16,false),false),greaterThan(16,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_16_16,false),false),equals(16,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_16_16,353358909)", + "doesNotEqual(D_418392907_16_16,353358909)", + "equals(D_812370563_16_16,939782495)", + "equals(D_812370563_16_16,135725957)", + "equals(D_812370563_16_16,518416174)", + "equals(D_812370563_16_16,847945207)", + "equals(D_812370563_16_16,283025574)", + "equals(D_812370563_16_16,942970912)", + "equals(D_812370563_16_16,596122041)", + "equals(D_812370563_16_16,489400183)", + "equals(D_812370563_16_16,863246236)", + "equals(D_812370563_16_16,607793249)", + "equals(D_812370563_16_16,532172400)", + "equals(D_812370563_16_16,754745617)", + "equals(D_812370563_16_16,665036297)", + "equals(D_812370563_16_16,200837530)", + "equals(D_812370563_16_16,990319383)", + "equals(D_812370563_16_16,487917585)", + "equals(D_812370563_16_16,603181162)", + "equals(D_812370563_16_16,482225200)", + "equals(D_812370563_16_16,295976386)", + "equals(D_812370563_16_16,764891959)", + "equals(D_812370563_16_16,248374037)", + "equals(D_812370563_16_16,139822395)", + "equals(D_812370563_16_16,723614811)", + "equals(D_812370563_16_16,807835037)", + "valueLength('D_933110091_16_16')>0", + "doesNotExist('D_933110091_16_16')", + "equals(D_812370563_16_16,178420302)", + "selectionCount(\"D_812370563_16_16\",true)>0 or valueLength(\"D_933110091_16_16\")>0", + "valueLength('D_714001034_16_16')>0", + "equals(D_887697329_16_16,536341288)", + "equals(D_887697329_16_16,654207589)", + "equals(D_887697329_16_16,178420302)", + "allExist('D_473529484_16_16','D_812370563_16_16')", + "equals(D_473529484_16_16,353358909)", + "equals(D_473529484_16_16,104430631)", + "equals(D_873968217_16_16,709650750)", + "equals(D_873968217_16_16,810290359)", + "equals(D_873968217_16_16,509607548)", + "equals(D_873968217_16_16,784922042)", + "equals(D_718867914_16_16,104430631)", + "equals(D_718867914_16_16,353358909)", + "equals(D_718867914_16_16,178420302)", + "equals(isNotDefined(D_714001034_17_17,false),false)", + "doesNotEqual(isNotDefined(D_714001034_17_17,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_17_17,false),false),greaterThan(17,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_17_17,false),false),equals(17,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_17_17,353358909)", + "doesNotEqual(D_418392907_17_17,353358909)", + "equals(D_812370563_17_17,939782495)", + "equals(D_812370563_17_17,135725957)", + "equals(D_812370563_17_17,518416174)", + "equals(D_812370563_17_17,847945207)", + "equals(D_812370563_17_17,283025574)", + "equals(D_812370563_17_17,942970912)", + "equals(D_812370563_17_17,596122041)", + "equals(D_812370563_17_17,489400183)", + "equals(D_812370563_17_17,863246236)", + "equals(D_812370563_17_17,607793249)", + "equals(D_812370563_17_17,532172400)", + "equals(D_812370563_17_17,754745617)", + "equals(D_812370563_17_17,665036297)", + "equals(D_812370563_17_17,200837530)", + "equals(D_812370563_17_17,990319383)", + "equals(D_812370563_17_17,487917585)", + "equals(D_812370563_17_17,603181162)", + "equals(D_812370563_17_17,482225200)", + "equals(D_812370563_17_17,295976386)", + "equals(D_812370563_17_17,764891959)", + "equals(D_812370563_17_17,248374037)", + "equals(D_812370563_17_17,139822395)", + "equals(D_812370563_17_17,723614811)", + "equals(D_812370563_17_17,807835037)", + "valueLength('D_933110091_17_17')>0", + "doesNotExist('D_933110091_17_17')", + "equals(D_812370563_17_17,178420302)", + "selectionCount(\"D_812370563_17_17\",true)>0 or valueLength(\"D_933110091_17_17\")>0", + "valueLength('D_714001034_17_17')>0", + "equals(D_887697329_17_17,536341288)", + "equals(D_887697329_17_17,654207589)", + "equals(D_887697329_17_17,178420302)", + "allExist('D_473529484_17_17','D_812370563_17_17')", + "equals(D_473529484_17_17,353358909)", + "equals(D_473529484_17_17,104430631)", + "equals(D_873968217_17_17,709650750)", + "equals(D_873968217_17_17,810290359)", + "equals(D_873968217_17_17,509607548)", + "equals(D_873968217_17_17,784922042)", + "equals(D_718867914_17_17,104430631)", + "equals(D_718867914_17_17,353358909)", + "equals(D_718867914_17_17,178420302)", + "equals(isNotDefined(D_714001034_18_18,false),false)", + "doesNotEqual(isNotDefined(D_714001034_18_18,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_18_18,false),false),greaterThan(18,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_18_18,false),false),equals(18,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_18_18,353358909)", + "doesNotEqual(D_418392907_18_18,353358909)", + "equals(D_812370563_18_18,939782495)", + "equals(D_812370563_18_18,135725957)", + "equals(D_812370563_18_18,518416174)", + "equals(D_812370563_18_18,847945207)", + "equals(D_812370563_18_18,283025574)", + "equals(D_812370563_18_18,942970912)", + "equals(D_812370563_18_18,596122041)", + "equals(D_812370563_18_18,489400183)", + "equals(D_812370563_18_18,863246236)", + "equals(D_812370563_18_18,607793249)", + "equals(D_812370563_18_18,532172400)", + "equals(D_812370563_18_18,754745617)", + "equals(D_812370563_18_18,665036297)", + "equals(D_812370563_18_18,200837530)", + "equals(D_812370563_18_18,990319383)", + "equals(D_812370563_18_18,487917585)", + "equals(D_812370563_18_18,603181162)", + "equals(D_812370563_18_18,482225200)", + "equals(D_812370563_18_18,295976386)", + "equals(D_812370563_18_18,764891959)", + "equals(D_812370563_18_18,248374037)", + "equals(D_812370563_18_18,139822395)", + "equals(D_812370563_18_18,723614811)", + "equals(D_812370563_18_18,807835037)", + "valueLength('D_933110091_18_18')>0", + "doesNotExist('D_933110091_18_18')", + "equals(D_812370563_18_18,178420302)", + "selectionCount(\"D_812370563_18_18\",true)>0 or valueLength(\"D_933110091_18_18\")>0", + "valueLength('D_714001034_18_18')>0", + "equals(D_887697329_18_18,536341288)", + "equals(D_887697329_18_18,654207589)", + "equals(D_887697329_18_18,178420302)", + "allExist('D_473529484_18_18','D_812370563_18_18')", + "equals(D_473529484_18_18,353358909)", + "equals(D_473529484_18_18,104430631)", + "equals(D_873968217_18_18,709650750)", + "equals(D_873968217_18_18,810290359)", + "equals(D_873968217_18_18,509607548)", + "equals(D_873968217_18_18,784922042)", + "equals(D_718867914_18_18,104430631)", + "equals(D_718867914_18_18,353358909)", + "equals(D_718867914_18_18,178420302)", + "equals(isNotDefined(D_714001034_19_19,false),false)", + "doesNotEqual(isNotDefined(D_714001034_19_19,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_19_19,false),false),greaterThan(19,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_19_19,false),false),equals(19,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_19_19,353358909)", + "doesNotEqual(D_418392907_19_19,353358909)", + "equals(D_812370563_19_19,939782495)", + "equals(D_812370563_19_19,135725957)", + "equals(D_812370563_19_19,518416174)", + "equals(D_812370563_19_19,847945207)", + "equals(D_812370563_19_19,283025574)", + "equals(D_812370563_19_19,942970912)", + "equals(D_812370563_19_19,596122041)", + "equals(D_812370563_19_19,489400183)", + "equals(D_812370563_19_19,863246236)", + "equals(D_812370563_19_19,607793249)", + "equals(D_812370563_19_19,532172400)", + "equals(D_812370563_19_19,754745617)", + "equals(D_812370563_19_19,665036297)", + "equals(D_812370563_19_19,200837530)", + "equals(D_812370563_19_19,990319383)", + "equals(D_812370563_19_19,487917585)", + "equals(D_812370563_19_19,603181162)", + "equals(D_812370563_19_19,482225200)", + "equals(D_812370563_19_19,295976386)", + "equals(D_812370563_19_19,764891959)", + "equals(D_812370563_19_19,248374037)", + "equals(D_812370563_19_19,139822395)", + "equals(D_812370563_19_19,723614811)", + "equals(D_812370563_19_19,807835037)", + "valueLength('D_933110091_19_19')>0", + "doesNotExist('D_933110091_19_19')", + "equals(D_812370563_19_19,178420302)", + "selectionCount(\"D_812370563_19_19\",true)>0 or valueLength(\"D_933110091_19_19\")>0", + "valueLength('D_714001034_19_19')>0", + "equals(D_887697329_19_19,536341288)", + "equals(D_887697329_19_19,654207589)", + "equals(D_887697329_19_19,178420302)", + "allExist('D_473529484_19_19','D_812370563_19_19')", + "equals(D_473529484_19_19,353358909)", + "equals(D_473529484_19_19,104430631)", + "equals(D_873968217_19_19,709650750)", + "equals(D_873968217_19_19,810290359)", + "equals(D_873968217_19_19,509607548)", + "equals(D_873968217_19_19,784922042)", + "equals(D_718867914_19_19,104430631)", + "equals(D_718867914_19_19,353358909)", + "equals(D_718867914_19_19,178420302)", + "equals(isNotDefined(D_714001034_20_20,false),false)", + "doesNotEqual(isNotDefined(D_714001034_20_20,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_20_20,false),false),greaterThan(20,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_20_20,false),false),equals(20,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_20_20,353358909)", + "doesNotEqual(D_418392907_20_20,353358909)", + "equals(D_812370563_20_20,939782495)", + "equals(D_812370563_20_20,135725957)", + "equals(D_812370563_20_20,518416174)", + "equals(D_812370563_20_20,847945207)", + "equals(D_812370563_20_20,283025574)", + "equals(D_812370563_20_20,942970912)", + "equals(D_812370563_20_20,596122041)", + "equals(D_812370563_20_20,489400183)", + "equals(D_812370563_20_20,863246236)", + "equals(D_812370563_20_20,607793249)", + "equals(D_812370563_20_20,532172400)", + "equals(D_812370563_20_20,754745617)", + "equals(D_812370563_20_20,665036297)", + "equals(D_812370563_20_20,200837530)", + "equals(D_812370563_20_20,990319383)", + "equals(D_812370563_20_20,487917585)", + "equals(D_812370563_20_20,603181162)", + "equals(D_812370563_20_20,482225200)", + "equals(D_812370563_20_20,295976386)", + "equals(D_812370563_20_20,764891959)", + "equals(D_812370563_20_20,248374037)", + "equals(D_812370563_20_20,139822395)", + "equals(D_812370563_20_20,723614811)", + "equals(D_812370563_20_20,807835037)", + "valueLength('D_933110091_20_20')>0", + "doesNotExist('D_933110091_20_20')", + "equals(D_812370563_20_20,178420302)", + "selectionCount(\"D_812370563_20_20\",true)>0 or valueLength(\"D_933110091_20_20\")>0", + "valueLength('D_714001034_20_20')>0", + "equals(D_887697329_20_20,536341288)", + "equals(D_887697329_20_20,654207589)", + "equals(D_887697329_20_20,178420302)", + "allExist('D_473529484_20_20','D_812370563_20_20')", + "equals(D_473529484_20_20,353358909)", + "equals(D_473529484_20_20,104430631)", + "equals(D_873968217_20_20,709650750)", + "equals(D_873968217_20_20,810290359)", + "equals(D_873968217_20_20,509607548)", + "equals(D_873968217_20_20,784922042)", + "equals(D_718867914_20_20,104430631)", + "equals(D_718867914_20_20,353358909)", + "equals(D_718867914_20_20,178420302)", + "equals(isNotDefined(D_714001034_21_21,false),false)", + "doesNotEqual(isNotDefined(D_714001034_21_21,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_21_21,false),false),greaterThan(21,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_21_21,false),false),equals(21,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_21_21,353358909)", + "doesNotEqual(D_418392907_21_21,353358909)", + "equals(D_812370563_21_21,939782495)", + "equals(D_812370563_21_21,135725957)", + "equals(D_812370563_21_21,518416174)", + "equals(D_812370563_21_21,847945207)", + "equals(D_812370563_21_21,283025574)", + "equals(D_812370563_21_21,942970912)", + "equals(D_812370563_21_21,596122041)", + "equals(D_812370563_21_21,489400183)", + "equals(D_812370563_21_21,863246236)", + "equals(D_812370563_21_21,607793249)", + "equals(D_812370563_21_21,532172400)", + "equals(D_812370563_21_21,754745617)", + "equals(D_812370563_21_21,665036297)", + "equals(D_812370563_21_21,200837530)", + "equals(D_812370563_21_21,990319383)", + "equals(D_812370563_21_21,487917585)", + "equals(D_812370563_21_21,603181162)", + "equals(D_812370563_21_21,482225200)", + "equals(D_812370563_21_21,295976386)", + "equals(D_812370563_21_21,764891959)", + "equals(D_812370563_21_21,248374037)", + "equals(D_812370563_21_21,139822395)", + "equals(D_812370563_21_21,723614811)", + "equals(D_812370563_21_21,807835037)", + "valueLength('D_933110091_21_21')>0", + "doesNotExist('D_933110091_21_21')", + "equals(D_812370563_21_21,178420302)", + "selectionCount(\"D_812370563_21_21\",true)>0 or valueLength(\"D_933110091_21_21\")>0", + "valueLength('D_714001034_21_21')>0", + "equals(D_887697329_21_21,536341288)", + "equals(D_887697329_21_21,654207589)", + "equals(D_887697329_21_21,178420302)", + "allExist('D_473529484_21_21','D_812370563_21_21')", + "equals(D_473529484_21_21,353358909)", + "equals(D_473529484_21_21,104430631)", + "equals(D_873968217_21_21,709650750)", + "equals(D_873968217_21_21,810290359)", + "equals(D_873968217_21_21,509607548)", + "equals(D_873968217_21_21,784922042)", + "equals(D_718867914_21_21,104430631)", + "equals(D_718867914_21_21,353358909)", + "equals(D_718867914_21_21,178420302)", + "equals(isNotDefined(D_714001034_22_22,false),false)", + "doesNotEqual(isNotDefined(D_714001034_22_22,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_22_22,false),false),greaterThan(22,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_22_22,false),false),equals(22,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_22_22,353358909)", + "doesNotEqual(D_418392907_22_22,353358909)", + "equals(D_812370563_22_22,939782495)", + "equals(D_812370563_22_22,135725957)", + "equals(D_812370563_22_22,518416174)", + "equals(D_812370563_22_22,847945207)", + "equals(D_812370563_22_22,283025574)", + "equals(D_812370563_22_22,942970912)", + "equals(D_812370563_22_22,596122041)", + "equals(D_812370563_22_22,489400183)", + "equals(D_812370563_22_22,863246236)", + "equals(D_812370563_22_22,607793249)", + "equals(D_812370563_22_22,532172400)", + "equals(D_812370563_22_22,754745617)", + "equals(D_812370563_22_22,665036297)", + "equals(D_812370563_22_22,200837530)", + "equals(D_812370563_22_22,990319383)", + "equals(D_812370563_22_22,487917585)", + "equals(D_812370563_22_22,603181162)", + "equals(D_812370563_22_22,482225200)", + "equals(D_812370563_22_22,295976386)", + "equals(D_812370563_22_22,764891959)", + "equals(D_812370563_22_22,248374037)", + "equals(D_812370563_22_22,139822395)", + "equals(D_812370563_22_22,723614811)", + "equals(D_812370563_22_22,807835037)", + "valueLength('D_933110091_22_22')>0", + "doesNotExist('D_933110091_22_22')", + "equals(D_812370563_22_22,178420302)", + "selectionCount(\"D_812370563_22_22\",true)>0 or valueLength(\"D_933110091_22_22\")>0", + "valueLength('D_714001034_22_22')>0", + "equals(D_887697329_22_22,536341288)", + "equals(D_887697329_22_22,654207589)", + "equals(D_887697329_22_22,178420302)", + "allExist('D_473529484_22_22','D_812370563_22_22')", + "equals(D_473529484_22_22,353358909)", + "equals(D_473529484_22_22,104430631)", + "equals(D_873968217_22_22,709650750)", + "equals(D_873968217_22_22,810290359)", + "equals(D_873968217_22_22,509607548)", + "equals(D_873968217_22_22,784922042)", + "equals(D_718867914_22_22,104430631)", + "equals(D_718867914_22_22,353358909)", + "equals(D_718867914_22_22,178420302)", + "equals(isNotDefined(D_714001034_23_23,false),false)", + "doesNotEqual(isNotDefined(D_714001034_23_23,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_23_23,false),false),greaterThan(23,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_23_23,false),false),equals(23,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_23_23,353358909)", + "doesNotEqual(D_418392907_23_23,353358909)", + "equals(D_812370563_23_23,939782495)", + "equals(D_812370563_23_23,135725957)", + "equals(D_812370563_23_23,518416174)", + "equals(D_812370563_23_23,847945207)", + "equals(D_812370563_23_23,283025574)", + "equals(D_812370563_23_23,942970912)", + "equals(D_812370563_23_23,596122041)", + "equals(D_812370563_23_23,489400183)", + "equals(D_812370563_23_23,863246236)", + "equals(D_812370563_23_23,607793249)", + "equals(D_812370563_23_23,532172400)", + "equals(D_812370563_23_23,754745617)", + "equals(D_812370563_23_23,665036297)", + "equals(D_812370563_23_23,200837530)", + "equals(D_812370563_23_23,990319383)", + "equals(D_812370563_23_23,487917585)", + "equals(D_812370563_23_23,603181162)", + "equals(D_812370563_23_23,482225200)", + "equals(D_812370563_23_23,295976386)", + "equals(D_812370563_23_23,764891959)", + "equals(D_812370563_23_23,248374037)", + "equals(D_812370563_23_23,139822395)", + "equals(D_812370563_23_23,723614811)", + "equals(D_812370563_23_23,807835037)", + "valueLength('D_933110091_23_23')>0", + "doesNotExist('D_933110091_23_23')", + "equals(D_812370563_23_23,178420302)", + "selectionCount(\"D_812370563_23_23\",true)>0 or valueLength(\"D_933110091_23_23\")>0", + "valueLength('D_714001034_23_23')>0", + "equals(D_887697329_23_23,536341288)", + "equals(D_887697329_23_23,654207589)", + "equals(D_887697329_23_23,178420302)", + "allExist('D_473529484_23_23','D_812370563_23_23')", + "equals(D_473529484_23_23,353358909)", + "equals(D_473529484_23_23,104430631)", + "equals(D_873968217_23_23,709650750)", + "equals(D_873968217_23_23,810290359)", + "equals(D_873968217_23_23,509607548)", + "equals(D_873968217_23_23,784922042)", + "equals(D_718867914_23_23,104430631)", + "equals(D_718867914_23_23,353358909)", + "equals(D_718867914_23_23,178420302)", + "equals(isNotDefined(D_714001034_24_24,false),false)", + "doesNotEqual(isNotDefined(D_714001034_24_24,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_24_24,false),false),greaterThan(24,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_24_24,false),false),equals(24,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_24_24,353358909)", + "doesNotEqual(D_418392907_24_24,353358909)", + "equals(D_812370563_24_24,939782495)", + "equals(D_812370563_24_24,135725957)", + "equals(D_812370563_24_24,518416174)", + "equals(D_812370563_24_24,847945207)", + "equals(D_812370563_24_24,283025574)", + "equals(D_812370563_24_24,942970912)", + "equals(D_812370563_24_24,596122041)", + "equals(D_812370563_24_24,489400183)", + "equals(D_812370563_24_24,863246236)", + "equals(D_812370563_24_24,607793249)", + "equals(D_812370563_24_24,532172400)", + "equals(D_812370563_24_24,754745617)", + "equals(D_812370563_24_24,665036297)", + "equals(D_812370563_24_24,200837530)", + "equals(D_812370563_24_24,990319383)", + "equals(D_812370563_24_24,487917585)", + "equals(D_812370563_24_24,603181162)", + "equals(D_812370563_24_24,482225200)", + "equals(D_812370563_24_24,295976386)", + "equals(D_812370563_24_24,764891959)", + "equals(D_812370563_24_24,248374037)", + "equals(D_812370563_24_24,139822395)", + "equals(D_812370563_24_24,723614811)", + "equals(D_812370563_24_24,807835037)", + "valueLength('D_933110091_24_24')>0", + "doesNotExist('D_933110091_24_24')", + "equals(D_812370563_24_24,178420302)", + "selectionCount(\"D_812370563_24_24\",true)>0 or valueLength(\"D_933110091_24_24\")>0", + "valueLength('D_714001034_24_24')>0", + "equals(D_887697329_24_24,536341288)", + "equals(D_887697329_24_24,654207589)", + "equals(D_887697329_24_24,178420302)", + "allExist('D_473529484_24_24','D_812370563_24_24')", + "equals(D_473529484_24_24,353358909)", + "equals(D_473529484_24_24,104430631)", + "equals(D_873968217_24_24,709650750)", + "equals(D_873968217_24_24,810290359)", + "equals(D_873968217_24_24,509607548)", + "equals(D_873968217_24_24,784922042)", + "equals(D_718867914_24_24,104430631)", + "equals(D_718867914_24_24,353358909)", + "equals(D_718867914_24_24,178420302)", + "equals(isNotDefined(D_714001034_25_25,false),false)", + "doesNotEqual(isNotDefined(D_714001034_25_25,false),false)", + "and(doesNotEqual(isNotDefined(D_714001034_25_25,false),false),greaterThan(25,1))", + "and(and(doesNotEqual(isNotDefined(D_714001034_25_25,false),false),equals(25,1)),doesNotEqual(D_446999144,1))", + "equals(D_418392907_25_25,353358909)", + "doesNotEqual(D_418392907_25_25,353358909)", + "equals(D_812370563_25_25,939782495)", + "equals(D_812370563_25_25,135725957)", + "equals(D_812370563_25_25,518416174)", + "equals(D_812370563_25_25,847945207)", + "equals(D_812370563_25_25,283025574)", + "equals(D_812370563_25_25,942970912)", + "equals(D_812370563_25_25,596122041)", + "equals(D_812370563_25_25,489400183)", + "equals(D_812370563_25_25,863246236)", + "equals(D_812370563_25_25,607793249)", + "equals(D_812370563_25_25,532172400)", + "equals(D_812370563_25_25,754745617)", + "equals(D_812370563_25_25,665036297)", + "equals(D_812370563_25_25,200837530)", + "equals(D_812370563_25_25,990319383)", + "equals(D_812370563_25_25,487917585)", + "equals(D_812370563_25_25,603181162)", + "equals(D_812370563_25_25,482225200)", + "equals(D_812370563_25_25,295976386)", + "equals(D_812370563_25_25,764891959)", + "equals(D_812370563_25_25,248374037)", + "equals(D_812370563_25_25,139822395)", + "equals(D_812370563_25_25,723614811)", + "equals(D_812370563_25_25,807835037)", + "valueLength('D_933110091_25_25')>0", + "doesNotExist('D_933110091_25_25')", + "equals(D_812370563_25_25,178420302)", + "selectionCount(\"D_812370563_25_25\",true)>0 or valueLength(\"D_933110091_25_25\")>0", + "valueLength('D_714001034_25_25')>0", + "equals(D_887697329_25_25,536341288)", + "equals(D_887697329_25_25,654207589)", + "equals(D_887697329_25_25,178420302)", + "allExist('D_473529484_25_25','D_812370563_25_25')", + "equals(D_473529484_25_25,353358909)", + "equals(D_473529484_25_25,104430631)", + "equals(D_873968217_25_25,709650750)", + "equals(D_873968217_25_25,810290359)", + "equals(D_873968217_25_25,509607548)", + "equals(D_873968217_25_25,784922042)", + "equals(D_718867914_25_25,104430631)", + "equals(D_718867914_25_25,353358909)", + "equals(D_718867914_25_25,178420302)" + ], + "sitesByScope": { + "inline": 4283, + "question": 1500, + "response": 12 + }, + "sitesByAttribute": { + "displayif": 5795 + } + }, + "grids": [], + "loops": [ + { + "loopIndex": "1", + "loopMaxQuestionIds": [ + "D_694265648" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 218, + 253, + 288, + 323, + 358, + 393, + 428, + 463, + 498, + 533, + 568, + 603, + 638, + 673, + 708, + 743, + 778, + 813, + 848, + 883, + 918, + 953, + 988, + 1023, + 1058 + ], + "boundaryIndex": 1093 + }, + { + "loopIndex": "2", + "loopMaxQuestionIds": [ + "D_446999144" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 1097, + 1132, + 1167, + 1202, + 1237, + 1272, + 1307, + 1342, + 1377, + 1412, + 1447, + 1482, + 1517, + 1552, + 1587, + 1622, + 1657, + 1692, + 1727, + 1762, + 1797, + 1832, + 1867, + 1902, + 1937 + ], + "boundaryIndex": 1972 + } + ], + "unresolvedTargets": [], + "asyncQuestionIds": [ + "D_279637054", + "D_761310265" + ], + "counts": { + "authoredMarkerCount": 315, + "processorQuestionCount": 1998, + "processedQuestionCount": 1998, + "renderedFormCount": 1998, + "controlCount": 11660, + "responseControlCount": 5610, + "explicitTransitionCount": 1831, + "sequentialAdjacencyCount": 1997, + "resolvedExplicitTransitionCount": 1831, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 5795, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 50, + "loopDefinitionCount": 2, + "loopExpandedQuestionCount": 1750, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 2620 + } + }, + { + "schemaVersion": 1, + "module": "module2", + "locale": "en", + "language": "en", + "path": "prod/module2.txt", + "sha256": "a7b9dba4edd27d55ccb3830b0b54b8d4fa7003a1d2a9c1c79749aaeeaa4f664f", + "questName": "D_745268907_V2", + "version": "2.3", + "authoredMarkerCount": 359, + "runtimeQuestionIds": [ + "INTROM2", + "SECTION1", + "D_399982309?", + "D_861838892?", + "D_596961796?", + "D_113681507?", + "D_177526169?", + "D_564374538?", + "D_643807999?", + "D_837412550?", + "D_825189914?", + "D_615979584?", + "D_814141708?", + "D_265428345?", + "D_275143071?", + "D_388804810?", + "D_753416375?", + "D_771526486?", + "D_292658699?", + "D_491549803?", + "D_152138929?", + "D_614446276?", + "D_646042915?", + "D_270254670?", + "D_861824298?", + "D_846227588?", + "D_630231395?", + "D_234177873?", + "D_799338907?", + "D_376720409?", + "D_575646308?", + "D_798182168?", + "D_655266993?", + "D_248599913?", + "D_893965588?", + "D_439072744?", + "D_733861762?", + "D_322479862?", + "D_509383583?", + "D_697661603?", + "D_438682764?", + "D_445571225?", + "D_761822652?", + "D_737490587?", + "D_887435355?", + "D_414005872?", + "D_614123836?", + "D_731790154?", + "D_550092533?", + "D_163057677?", + "D_225047594?", + "D_297084062?", + "D_305292465?", + "D_901498441?", + "D_147792229?", + "D_976052812?", + "D_991427384?", + "D_112024853?", + "D_694817520?", + "D_991622246?", + "D_450131058?", + "D_991873978?", + "D_371176229?", + "D_982448213?", + "D_745223146?", + "D_273218182?", + "D_850202336?", + "D_799903478?", + "D_465635548?", + "D_556235252?", + "D_643361372?", + "D_172234651?", + "D_753610471?", + "D_424183977?", + "D_824287808?", + "D_889053435?", + "D_416865817?", + "D_803968511?", + "D_378572291?", + "D_846978339?", + "D_936366310?", + "D_266752903?", + "D_618427836?", + "D_774514900?", + "D_368595692?", + "D_497904005?", + "SECTION2", + "SECTION2_SKIPPED", + "INTROWH", + "INTROMENSHIS", + "D_496539718?", + "D_167997205?", + "D_972593606?", + "D_791830593?", + "INTROMENSHIS2", + "D_547633480?", + "D_164595895?", + "D_263114971?", + "D_614145455?", + "D_534920374?", + "PREG", + "D_849945160?", + "D_996243083?", + "D_405571048!", + "D_968816827_1_1?", + "D_391951010_1_1?", + "D_281494550_1_1?", + "D_771528780_1_1?", + "D_486574018_1_1?", + "D_278277373_1_1?", + "D_779052408_1_1?", + "D_133297530_1_1?", + "PREGSUMMARY_1_1", + "D_968816827_2_2?", + "D_391951010_2_2?", + "D_281494550_2_2?", + "D_771528780_2_2?", + "D_486574018_2_2?", + "D_278277373_2_2?", + "D_779052408_2_2?", + "D_133297530_2_2?", + "PREGSUMMARY_2_2", + "D_968816827_3_3?", + "D_391951010_3_3?", + "D_281494550_3_3?", + "D_771528780_3_3?", + "D_486574018_3_3?", + "D_278277373_3_3?", + "D_779052408_3_3?", + "D_133297530_3_3?", + "PREGSUMMARY_3_3", + "D_968816827_4_4?", + "D_391951010_4_4?", + "D_281494550_4_4?", + "D_771528780_4_4?", + "D_486574018_4_4?", + "D_278277373_4_4?", + "D_779052408_4_4?", + "D_133297530_4_4?", + "PREGSUMMARY_4_4", + "D_968816827_5_5?", + "D_391951010_5_5?", + "D_281494550_5_5?", + "D_771528780_5_5?", + "D_486574018_5_5?", + "D_278277373_5_5?", + "D_779052408_5_5?", + "D_133297530_5_5?", + "PREGSUMMARY_5_5", + "D_968816827_6_6?", + "D_391951010_6_6?", + "D_281494550_6_6?", + "D_771528780_6_6?", + "D_486574018_6_6?", + "D_278277373_6_6?", + "D_779052408_6_6?", + "D_133297530_6_6?", + "PREGSUMMARY_6_6", + "D_968816827_7_7?", + "D_391951010_7_7?", + "D_281494550_7_7?", + "D_771528780_7_7?", + "D_486574018_7_7?", + "D_278277373_7_7?", + "D_779052408_7_7?", + "D_133297530_7_7?", + "PREGSUMMARY_7_7", + "D_968816827_8_8?", + "D_391951010_8_8?", + "D_281494550_8_8?", + "D_771528780_8_8?", + "D_486574018_8_8?", + "D_278277373_8_8?", + "D_779052408_8_8?", + "D_133297530_8_8?", + "PREGSUMMARY_8_8", + "D_968816827_9_9?", + "D_391951010_9_9?", + "D_281494550_9_9?", + "D_771528780_9_9?", + "D_486574018_9_9?", + "D_278277373_9_9?", + "D_779052408_9_9?", + "D_133297530_9_9?", + "PREGSUMMARY_9_9", + "D_968816827_10_10?", + "D_391951010_10_10?", + "D_281494550_10_10?", + "D_771528780_10_10?", + "D_486574018_10_10?", + "D_278277373_10_10?", + "D_779052408_10_10?", + "D_133297530_10_10?", + "PREGSUMMARY_10_10", + "D_968816827_11_11?", + "D_391951010_11_11?", + "D_281494550_11_11?", + "D_771528780_11_11?", + "D_486574018_11_11?", + "D_278277373_11_11?", + "D_779052408_11_11?", + "D_133297530_11_11?", + "PREGSUMMARY_11_11", + "D_968816827_12_12?", + "D_391951010_12_12?", + "D_281494550_12_12?", + "D_771528780_12_12?", + "D_486574018_12_12?", + "D_278277373_12_12?", + "D_779052408_12_12?", + "D_133297530_12_12?", + "PREGSUMMARY_12_12", + "D_968816827_13_13?", + "D_391951010_13_13?", + "D_281494550_13_13?", + "D_771528780_13_13?", + "D_486574018_13_13?", + "D_278277373_13_13?", + "D_779052408_13_13?", + "D_133297530_13_13?", + "PREGSUMMARY_13_13", + "D_968816827_14_14?", + "D_391951010_14_14?", + "D_281494550_14_14?", + "D_771528780_14_14?", + "D_486574018_14_14?", + "D_278277373_14_14?", + "D_779052408_14_14?", + "D_133297530_14_14?", + "PREGSUMMARY_14_14", + "D_968816827_15_15?", + "D_391951010_15_15?", + "D_281494550_15_15?", + "D_771528780_15_15?", + "D_486574018_15_15?", + "D_278277373_15_15?", + "D_779052408_15_15?", + "D_133297530_15_15?", + "PREGSUMMARY_15_15", + "D_968816827_16_16?", + "D_391951010_16_16?", + "D_281494550_16_16?", + "D_771528780_16_16?", + "D_486574018_16_16?", + "D_278277373_16_16?", + "D_779052408_16_16?", + "D_133297530_16_16?", + "PREGSUMMARY_16_16", + "D_968816827_17_17?", + "D_391951010_17_17?", + "D_281494550_17_17?", + "D_771528780_17_17?", + "D_486574018_17_17?", + "D_278277373_17_17?", + "D_779052408_17_17?", + "D_133297530_17_17?", + "PREGSUMMARY_17_17", + "D_968816827_18_18?", + "D_391951010_18_18?", + "D_281494550_18_18?", + "D_771528780_18_18?", + "D_486574018_18_18?", + "D_278277373_18_18?", + "D_779052408_18_18?", + "D_133297530_18_18?", + "PREGSUMMARY_18_18", + "D_968816827_19_19?", + "D_391951010_19_19?", + "D_281494550_19_19?", + "D_771528780_19_19?", + "D_486574018_19_19?", + "D_278277373_19_19?", + "D_779052408_19_19?", + "D_133297530_19_19?", + "PREGSUMMARY_19_19", + "D_968816827_20_20?", + "D_391951010_20_20?", + "D_281494550_20_20?", + "D_771528780_20_20?", + "D_486574018_20_20?", + "D_278277373_20_20?", + "D_779052408_20_20?", + "D_133297530_20_20?", + "PREGSUMMARY_20_20", + "D_968816827_21_21?", + "D_391951010_21_21?", + "D_281494550_21_21?", + "D_771528780_21_21?", + "D_486574018_21_21?", + "D_278277373_21_21?", + "D_779052408_21_21?", + "D_133297530_21_21?", + "PREGSUMMARY_21_21", + "D_968816827_22_22?", + "D_391951010_22_22?", + "D_281494550_22_22?", + "D_771528780_22_22?", + "D_486574018_22_22?", + "D_278277373_22_22?", + "D_779052408_22_22?", + "D_133297530_22_22?", + "PREGSUMMARY_22_22", + "D_968816827_23_23?", + "D_391951010_23_23?", + "D_281494550_23_23?", + "D_771528780_23_23?", + "D_486574018_23_23?", + "D_278277373_23_23?", + "D_779052408_23_23?", + "D_133297530_23_23?", + "PREGSUMMARY_23_23", + "D_968816827_24_24?", + "D_391951010_24_24?", + "D_281494550_24_24?", + "D_771528780_24_24?", + "D_486574018_24_24?", + "D_278277373_24_24?", + "D_779052408_24_24?", + "D_133297530_24_24?", + "PREGSUMMARY_24_24", + "D_968816827_25_25?", + "D_391951010_25_25?", + "D_281494550_25_25?", + "D_771528780_25_25?", + "D_486574018_25_25?", + "D_278277373_25_25?", + "D_779052408_25_25?", + "D_133297530_25_25?", + "PREGSUMMARY_25_25", + "END_OF_LOOP", + "FERT1", + "D_939897560?", + "D_760801131?", + "D_424047361?", + "D_548355426?", + "D_224681201?", + "D_881200765?", + "D_139673389?", + "D_943996164?", + "D_994899398?", + "D_198719822?", + "D_628137243?", + "D_399078599?", + "D_560711355?", + "D_309710463?", + "D_167207966?", + "D_538349354?", + "D_767785846?", + "D_466346054?", + "D_111082535?", + "D_875135634?", + "HORMED", + "D_543780863?", + "D_880331901?", + "D_301052397?", + "D_734836192?", + "D_215455305?", + "D_809735528?", + "D_958009220?", + "D_946211808?", + "D_654271781?", + "D_220105997?", + "D_806253825?", + "D_819957363?", + "D_604086099?", + "D_938969985?", + "D_876683805?", + "D_118237712?", + "D_899455852?", + "D_902999015?", + "D_484006644?", + "D_190721176?", + "D_358011592?", + "D_807214881?", + "D_344573484?", + "D_708921303?", + "D_535533643?", + "D_901154649?", + "D_100937200?", + "D_452984435?", + "D_129924389?", + "D_404596261?", + "D_465017353?", + "D_370798456?", + "D_101144925?", + "D_583012139?", + "D_991330361?", + "D_184692605?", + "D_139348254?", + "MENOHOR", + "D_621744463?", + "D_668834883?", + "D_856627601?", + "D_801749224?", + "D_799382711?", + "D_623759247?", + "D_564185028?", + "D_560845692?", + "D_779165920?", + "D_745775718?", + "D_648678282?", + "D_850536692?", + "D_774992239?", + "D_695206943?", + "D_291707744?", + "D_792792066?", + "D_894363067?", + "D_984901301?", + "D_872509317?", + "D_378921620?", + "D_854078473?", + "D_268372217?", + "D_800943768?", + "D_590329439?", + "D_906459952?", + "D_747629521?", + "D_556129044?", + "D_563663099?", + "D_356969766?", + "D_453820991?", + "D_111271067?", + "D_597869478?", + "D_949663397?", + "D_263785082?", + "D_824165133?", + "D_295472931?", + "D_728437398?", + "D_578176688?", + "D_922903688?", + "D_963284259?", + "D_615905904?", + "D_946710366?", + "D_219538082?", + "D_583111732?", + "D_603209609?", + "D_824251330?", + "D_912818075?", + "D_138836502?", + "D_290126991?", + "TESTTHER_INTRO", + "D_111235606?", + "D_946849196?", + "D_797076693?", + "D_984514646?", + "D_414663452?", + "D_570187182?", + "D_557526470?", + "D_492822047?", + "D_466727144?", + "D_307736999?", + "D_305195766?", + "WORKACT", + "D_392658845", + "INTROSITTING", + "D_649352910", + "HOUSE1", + "D_733547268", + "D_128705365", + "D_204421360?", + "D_442059084?", + "D_992022740?", + "D_429531329?", + "D_829749579?", + "D_888313306?", + "D_644018981?", + "D_618482103?", + "D_352531133?", + "D_267261558?", + "D_517976064?", + "D_894610280?", + "D_267122668?", + "D_901660173?", + "D_222110888?", + "D_953510929?", + "D_422260069?", + "D_564242877?", + "D_411788467?", + "D_141251197?", + "D_635874413?", + "D_184448791?", + "D_768302347?", + "D_371748514?", + "D_944699052?", + "D_658018390?", + "D_858525957?", + "D_849399881?", + "D_406846149?", + "D_787591805?", + "D_689956879?", + "D_725713485?", + "D_900299856?", + "D_255761998?", + "D_571361258?", + "D_149884127?", + "D_167966775?", + "D_904844824?", + "D_845164425?", + "D_612068433?", + "D_650405110?", + "D_187772368?", + "D_865200503?", + "D_831643763?", + "D_815229596?", + "D_981509686?", + "D_921220809?", + "D_262305264?", + "D_214750556?", + "D_621878019?", + "D_409324592?", + "D_775324618?", + "D_305312165?", + "D_895837106?", + "D_522949496?", + "D_272119228?", + "SECTION4", + "D_591723682?", + "D_168431681?", + "INTROSLESCH1", + "INTROSLESCH1_1", + "D_636757313?", + "D_653906464?", + "D_580367946?", + "D_358259099?", + "D_392629868?", + "D_354980163?", + "D_424807655?", + "INTROSLESCH2", + "D_823919522?", + "D_532767229?", + "D_698673038?", + "D_711365027?", + "D_874262904?", + "D_820694957?", + "D_823541843?", + "D_825227968?", + "SLEEPHABITS", + "D_421859821", + "D_910856756?", + "D_981441822", + "D_471018082?", + "D_940733450?", + "D_406137786?", + "D_631303960?", + "D_876846761?", + "D_756521698?", + "D_479628567?", + "D_629010195?", + "D_674976924?", + "D_195662769?", + "D_214870856?", + "D_680730257?", + "D_392874924?", + "D_199254974?", + "END" + ], + "responseControlsByType": { + "checkbox": 244, + "number": 236, + "radio": 1105, + "text": 9, + "time": 6 + }, + "explicitTransitions": { + "targets": [ + "D_861838892", + "D_837412550", + "D_388804810", + "D_614446276", + "D_234177873", + "D_248599913", + "D_697661603", + "D_414005872", + "D_596961796", + "D_113681507", + "D_177526169", + "D_643807999", + "D_564374538", + "D_825189914", + "D_615979584", + "D_814141708", + "D_275143071", + "D_265428345", + "D_753416375", + "D_771526486", + "D_292658699", + "D_152138929", + "D_491549803", + "D_646042915", + "D_270254670", + "D_861824298", + "D_630231395", + "D_846227588", + "D_799338907", + "D_376720409", + "D_575646308", + "D_655266993", + "D_798182168", + "D_893965588", + "D_439072744", + "D_733861762", + "D_509383583", + "D_322479862", + "D_438682764", + "D_445571225", + "D_761822652", + "D_887435355", + "D_737490587", + "D_731790154", + "D_305292465", + "D_112024853", + "D_550092533", + "D_163057677", + "D_225047594", + "D_297084062", + "D_901498441", + "D_147792229", + "D_976052812", + "D_991427384", + "D_694817520", + "D_982448213", + "D_371176229", + "D_745223146", + "D_643361372", + "D_556235252", + "D_172234651", + "D_416865817", + "D_266752903", + "SECTION2", + "D_753610471", + "D_424183977", + "D_824287808", + "D_889053435", + "D_803968511", + "D_378572291", + "D_846978339", + "D_936366310", + "D_618427836", + "D_774514900", + "D_368595692", + "D_497904005", + "D_111235606", + "INTROMENSHIS2", + "D_972593606", + "D_791830593", + "D_534920374", + "D_614145455", + "PREG", + "D_263114971", + "D_405571048", + "D_996243083", + "FERT1", + "D_771528780_1_1", + "PREGSUMMARY_1_1", + "D_779052408_1_1", + "D_771528780_2_2", + "PREGSUMMARY_2_2", + "D_779052408_2_2", + "D_771528780_3_3", + "PREGSUMMARY_3_3", + "D_779052408_3_3", + "D_771528780_4_4", + "PREGSUMMARY_4_4", + "D_779052408_4_4", + "D_771528780_5_5", + "PREGSUMMARY_5_5", + "D_779052408_5_5", + "D_771528780_6_6", + "PREGSUMMARY_6_6", + "D_779052408_6_6", + "D_771528780_7_7", + "PREGSUMMARY_7_7", + "D_779052408_7_7", + "D_771528780_8_8", + "PREGSUMMARY_8_8", + "D_779052408_8_8", + "D_771528780_9_9", + "PREGSUMMARY_9_9", + "D_779052408_9_9", + "D_771528780_10_10", + "PREGSUMMARY_10_10", + "D_779052408_10_10", + "D_771528780_11_11", + "PREGSUMMARY_11_11", + "D_779052408_11_11", + "D_771528780_12_12", + "PREGSUMMARY_12_12", + "D_779052408_12_12", + "D_771528780_13_13", + "PREGSUMMARY_13_13", + "D_779052408_13_13", + "D_771528780_14_14", + "PREGSUMMARY_14_14", + "D_779052408_14_14", + "D_771528780_15_15", + "PREGSUMMARY_15_15", + "D_779052408_15_15", + "D_771528780_16_16", + "PREGSUMMARY_16_16", + "D_779052408_16_16", + "D_771528780_17_17", + "PREGSUMMARY_17_17", + "D_779052408_17_17", + "D_771528780_18_18", + "PREGSUMMARY_18_18", + "D_779052408_18_18", + "D_771528780_19_19", + "PREGSUMMARY_19_19", + "D_779052408_19_19", + "D_771528780_20_20", + "PREGSUMMARY_20_20", + "D_779052408_20_20", + "D_771528780_21_21", + "PREGSUMMARY_21_21", + "D_779052408_21_21", + "D_771528780_22_22", + "PREGSUMMARY_22_22", + "D_779052408_22_22", + "D_771528780_23_23", + "PREGSUMMARY_23_23", + "D_779052408_23_23", + "D_771528780_24_24", + "PREGSUMMARY_24_24", + "D_779052408_24_24", + "D_771528780_25_25", + "PREGSUMMARY_25_25", + "D_779052408_25_25", + "D_224681201", + "D_111082535", + "D_139673389", + "D_943996164", + "D_994899398", + "D_198719822", + "D_628137243", + "D_399078599", + "D_560711355", + "D_309710463", + "D_167207966", + "D_538349354", + "D_767785846", + "D_466346054", + "D_875135634", + "HORMED", + "D_880331901", + "D_809735528", + "D_220105997", + "D_938969985", + "D_902999015", + "D_807214881", + "D_901154649", + "D_404596261", + "D_583012139", + "MENOHOR", + "D_301052397", + "D_215455305", + "D_734836192", + "D_958009220", + "D_654271781", + "D_946211808", + "D_806253825", + "D_604086099", + "D_819957363", + "D_876683805", + "D_899455852", + "D_118237712", + "D_484006644", + "D_358011592", + "D_190721176", + "D_344573484", + "D_535533643", + "D_708921303", + "D_100937200", + "D_129924389", + "D_452984435", + "D_465017353", + "D_101144925", + "D_370798456", + "D_991330361", + "D_139348254", + "D_184692605", + "D_668834883", + "WORKACT", + "D_856627601", + "D_564185028", + "D_648678282", + "D_291707744", + "D_872509317", + "D_800943768", + "D_801749224", + "D_623759247", + "D_799382711", + "D_560845692", + "D_745775718", + "D_779165920", + "D_850536692", + "D_695206943", + "D_774992239", + "D_792792066", + "D_984901301", + "D_894363067", + "D_378921620", + "D_268372217", + "D_854078473", + "D_590329439", + "D_356969766", + "D_263785082", + "D_906459952", + "D_556129044", + "D_747629521", + "D_563663099", + "D_453820991", + "D_597869478", + "D_111271067", + "D_949663397", + "D_824165133", + "D_922903688", + "D_219538082", + "TESTTHER_INTRO", + "D_295472931", + "D_578176688", + "D_728437398", + "D_963284259", + "D_946710366", + "D_615905904", + "D_583111732", + "D_824251330", + "D_603209609", + "D_290126991", + "D_570187182", + "D_557526470", + "D_305195766", + "D_307736999", + "D_442059084", + "D_829749579", + "D_618482103", + "D_517976064", + "D_992022740", + "D_429531329", + "D_888313306", + "D_644018981", + "D_352531133", + "D_267261558", + "D_894610280", + "D_222110888", + "D_564242877", + "D_635874413", + "D_371748514", + "D_858525957", + "D_787591805", + "D_900299856", + "D_149884127", + "D_845164425", + "D_187772368", + "D_815229596", + "D_262305264", + "D_409324592", + "D_895837106", + "SECTION4", + "D_267122668", + "D_901660173", + "D_953510929", + "D_422260069", + "D_411788467", + "D_141251197", + "D_184448791", + "D_768302347", + "D_944699052", + "D_658018390", + "D_849399881", + "D_406846149", + "D_689956879", + "D_725713485", + "D_255761998", + "D_571361258", + "D_167966775", + "D_904844824", + "D_612068433", + "D_650405110", + "D_865200503", + "D_831643763", + "D_981509686", + "D_921220809", + "D_214750556", + "D_621878019", + "D_775324618", + "D_305312165", + "D_522949496", + "D_272119228", + "D_168431681", + "INTROSLESCH1", + "D_636757313", + "D_354980163", + "D_424807655", + "D_820694957", + "D_823541843", + "D_406137786", + "D_479628567", + "D_631303960", + "D_876846761", + "D_756521698", + "D_629010195", + "D_674976924", + "D_195662769", + "END" + ], + "byKind": { + "default": 140, + "no-response": 104, + "response": 314 + }, + "byResolution": { + "exact": 555, + "terminal": 3 + }, + "triggerTypes": { + "checkbox": 65, + "hidden": 244, + "radio": 249 + }, + "triggerValues": [ + "469512398", + "194424439", + "422188606", + "555555502", + "800410166", + "221645137", + "974248369", + "317567178", + "484055234", + "802197176", + "480724806", + "819373917", + "353358909", + "104430631", + "933374659", + "920460744", + "449861632", + "648960871", + "868025301", + "939110313", + "410083265", + "718537646", + "801142243", + "178420302", + "549031911", + "858427002", + "471375042", + "386152189", + "650420270", + "113064256", + "548167685", + "859025516", + "582425113", + "330745988", + "909774794", + "868504994", + "655309065", + "757609794", + "585076356", + "807835037", + "223216393", + "306890578", + "858244199", + "746038746", + "619799524", + "663814928", + "642004888", + "454641975", + "256131117", + "532607252", + "459188493", + "304927036", + "100181644", + "372219003", + "743731422", + "441493408", + "612012325", + "100752105", + "207913198", + "863920008", + "787142499", + "205223932", + "817131019", + "181769837", + "246843973", + "854184254", + "515434780", + "674148137", + "687050279", + "837393880", + "944874693", + "535003378", + "797221287", + "500744195", + "383015037", + "904954920", + "619501806", + "203192394", + "261267696", + "926584500", + "420058896", + "868685663", + "760484278", + "345916806", + "936042582", + "182827107", + "734860227", + "371531887", + "423631576", + "370923702", + "958538953", + "274062548" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "valueIsOneOf('D_750420077',578416151,434651539) or valueEquals('D_407056417',536341288)", + "valueIsOneOf(\"D_750420077\",578416151,434651539) or valueEquals(\"D_407056417\",536341288)", + "equals(D_643361372,933374659)", + "equals(D_643361372,920460744)", + "equals(D_643361372,449861632)", + "not (equals(\"D_407056417\",536341288) or valueIsOneOf(\"D_750420077\",578416151,434651539))", + "equals(\"D_407056417\",536341288) or valueIsOneOf(\"D_750420077\",578416151,434651539)", + "doesNotEqual(D_496539718,648960871)", + "greaterThanOrEqual(D_405571048,1)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,1)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,1)))", + "equals(D_391951010_1_1,628445697)", + "equals(D_391951010_1_1,419220239)", + "or(equals(D_391951010_1_1,223216393),equals(D_391951010_1_1,628445697))", + "equals(D_391951010_1_1,223216393)", + "equals(D_391951010_1_1,306890578)", + "equals(D_391951010_1_1,858244199)", + "equals(D_391951010_1_1,746038746)", + "valueIsOneOf('D_391951010_1_1',628445697,419220239)", + "equals(D_281494550_1_1,582602017)", + "equals(D_281494550_1_1,105727261)", + "equals(D_281494550_1_1,720288326)", + "valueIsOneOf('D_391951010_1_1',223216393,628445697,419220239)", + "equals(D_771528780_1_1,660308254)", + "equals(D_771528780_1_1,936573532)", + "equals(D_486574018_1_1,353358909)", + "equals(D_486574018_1_1,104430631)", + "valueIsOneOf('D_391951010_1_1',223216393,628445697,419220239,858244199)", + "equals(D_779052408_1_1,353358909)", + "equals(D_779052408_1_1,104430631)", + "equals(D_133297530_1_1,353358909)", + "equals(D_133297530_1_1,104430631)", + "greaterThanOrEqual(D_405571048,2)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,2)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,2)))", + "equals(D_391951010_2_2,628445697)", + "equals(D_391951010_2_2,419220239)", + "or(equals(D_391951010_2_2,223216393),equals(D_391951010_2_2,628445697))", + "equals(D_391951010_2_2,223216393)", + "equals(D_391951010_2_2,306890578)", + "equals(D_391951010_2_2,858244199)", + "equals(D_391951010_2_2,746038746)", + "valueIsOneOf('D_391951010_2_2',628445697,419220239)", + "equals(D_281494550_2_2,582602017)", + "equals(D_281494550_2_2,105727261)", + "equals(D_281494550_2_2,720288326)", + "valueIsOneOf('D_391951010_2_2',223216393,628445697,419220239)", + "equals(D_771528780_2_2,660308254)", + "equals(D_771528780_2_2,936573532)", + "equals(D_486574018_2_2,353358909)", + "equals(D_486574018_2_2,104430631)", + "valueIsOneOf('D_391951010_2_2',223216393,628445697,419220239,858244199)", + "equals(D_779052408_2_2,353358909)", + "equals(D_779052408_2_2,104430631)", + "equals(D_133297530_2_2,353358909)", + "equals(D_133297530_2_2,104430631)", + "greaterThanOrEqual(D_405571048,3)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,3)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,3)))", + "equals(D_391951010_3_3,628445697)", + "equals(D_391951010_3_3,419220239)", + "or(equals(D_391951010_3_3,223216393),equals(D_391951010_3_3,628445697))", + "equals(D_391951010_3_3,223216393)", + "equals(D_391951010_3_3,306890578)", + "equals(D_391951010_3_3,858244199)", + "equals(D_391951010_3_3,746038746)", + "valueIsOneOf('D_391951010_3_3',628445697,419220239)", + "equals(D_281494550_3_3,582602017)", + "equals(D_281494550_3_3,105727261)", + "equals(D_281494550_3_3,720288326)", + "valueIsOneOf('D_391951010_3_3',223216393,628445697,419220239)", + "equals(D_771528780_3_3,660308254)", + "equals(D_771528780_3_3,936573532)", + "equals(D_486574018_3_3,353358909)", + "equals(D_486574018_3_3,104430631)", + "valueIsOneOf('D_391951010_3_3',223216393,628445697,419220239,858244199)", + "equals(D_779052408_3_3,353358909)", + "equals(D_779052408_3_3,104430631)", + "equals(D_133297530_3_3,353358909)", + "equals(D_133297530_3_3,104430631)", + "greaterThanOrEqual(D_405571048,4)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,4)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,4)))", + "equals(D_391951010_4_4,628445697)", + "equals(D_391951010_4_4,419220239)", + "or(equals(D_391951010_4_4,223216393),equals(D_391951010_4_4,628445697))", + "equals(D_391951010_4_4,223216393)", + "equals(D_391951010_4_4,306890578)", + "equals(D_391951010_4_4,858244199)", + "equals(D_391951010_4_4,746038746)", + "valueIsOneOf('D_391951010_4_4',628445697,419220239)", + "equals(D_281494550_4_4,582602017)", + "equals(D_281494550_4_4,105727261)", + "equals(D_281494550_4_4,720288326)", + "valueIsOneOf('D_391951010_4_4',223216393,628445697,419220239)", + "equals(D_771528780_4_4,660308254)", + "equals(D_771528780_4_4,936573532)", + "equals(D_486574018_4_4,353358909)", + "equals(D_486574018_4_4,104430631)", + "valueIsOneOf('D_391951010_4_4',223216393,628445697,419220239,858244199)", + "equals(D_779052408_4_4,353358909)", + "equals(D_779052408_4_4,104430631)", + "equals(D_133297530_4_4,353358909)", + "equals(D_133297530_4_4,104430631)", + "greaterThanOrEqual(D_405571048,5)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,5)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,5)))", + "equals(D_391951010_5_5,628445697)", + "equals(D_391951010_5_5,419220239)", + "or(equals(D_391951010_5_5,223216393),equals(D_391951010_5_5,628445697))", + "equals(D_391951010_5_5,223216393)", + "equals(D_391951010_5_5,306890578)", + "equals(D_391951010_5_5,858244199)", + "equals(D_391951010_5_5,746038746)", + "valueIsOneOf('D_391951010_5_5',628445697,419220239)", + "equals(D_281494550_5_5,582602017)", + "equals(D_281494550_5_5,105727261)", + "equals(D_281494550_5_5,720288326)", + "valueIsOneOf('D_391951010_5_5',223216393,628445697,419220239)", + "equals(D_771528780_5_5,660308254)", + "equals(D_771528780_5_5,936573532)", + "equals(D_486574018_5_5,353358909)", + "equals(D_486574018_5_5,104430631)", + "valueIsOneOf('D_391951010_5_5',223216393,628445697,419220239,858244199)", + "equals(D_779052408_5_5,353358909)", + "equals(D_779052408_5_5,104430631)", + "equals(D_133297530_5_5,353358909)", + "equals(D_133297530_5_5,104430631)", + "greaterThanOrEqual(D_405571048,6)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,6)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,6)))", + "equals(D_391951010_6_6,628445697)", + "equals(D_391951010_6_6,419220239)", + "or(equals(D_391951010_6_6,223216393),equals(D_391951010_6_6,628445697))", + "equals(D_391951010_6_6,223216393)", + "equals(D_391951010_6_6,306890578)", + "equals(D_391951010_6_6,858244199)", + "equals(D_391951010_6_6,746038746)", + "valueIsOneOf('D_391951010_6_6',628445697,419220239)", + "equals(D_281494550_6_6,582602017)", + "equals(D_281494550_6_6,105727261)", + "equals(D_281494550_6_6,720288326)", + "valueIsOneOf('D_391951010_6_6',223216393,628445697,419220239)", + "equals(D_771528780_6_6,660308254)", + "equals(D_771528780_6_6,936573532)", + "equals(D_486574018_6_6,353358909)", + "equals(D_486574018_6_6,104430631)", + "valueIsOneOf('D_391951010_6_6',223216393,628445697,419220239,858244199)", + "equals(D_779052408_6_6,353358909)", + "equals(D_779052408_6_6,104430631)", + "equals(D_133297530_6_6,353358909)", + "equals(D_133297530_6_6,104430631)", + "greaterThanOrEqual(D_405571048,7)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,7)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,7)))", + "equals(D_391951010_7_7,628445697)", + "equals(D_391951010_7_7,419220239)", + "or(equals(D_391951010_7_7,223216393),equals(D_391951010_7_7,628445697))", + "equals(D_391951010_7_7,223216393)", + "equals(D_391951010_7_7,306890578)", + "equals(D_391951010_7_7,858244199)", + "equals(D_391951010_7_7,746038746)", + "valueIsOneOf('D_391951010_7_7',628445697,419220239)", + "equals(D_281494550_7_7,582602017)", + "equals(D_281494550_7_7,105727261)", + "equals(D_281494550_7_7,720288326)", + "valueIsOneOf('D_391951010_7_7',223216393,628445697,419220239)", + "equals(D_771528780_7_7,660308254)", + "equals(D_771528780_7_7,936573532)", + "equals(D_486574018_7_7,353358909)", + "equals(D_486574018_7_7,104430631)", + "valueIsOneOf('D_391951010_7_7',223216393,628445697,419220239,858244199)", + "equals(D_779052408_7_7,353358909)", + "equals(D_779052408_7_7,104430631)", + "equals(D_133297530_7_7,353358909)", + "equals(D_133297530_7_7,104430631)", + "greaterThanOrEqual(D_405571048,8)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,8)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,8)))", + "equals(D_391951010_8_8,628445697)", + "equals(D_391951010_8_8,419220239)", + "or(equals(D_391951010_8_8,223216393),equals(D_391951010_8_8,628445697))", + "equals(D_391951010_8_8,223216393)", + "equals(D_391951010_8_8,306890578)", + "equals(D_391951010_8_8,858244199)", + "equals(D_391951010_8_8,746038746)", + "valueIsOneOf('D_391951010_8_8',628445697,419220239)", + "equals(D_281494550_8_8,582602017)", + "equals(D_281494550_8_8,105727261)", + "equals(D_281494550_8_8,720288326)", + "valueIsOneOf('D_391951010_8_8',223216393,628445697,419220239)", + "equals(D_771528780_8_8,660308254)", + "equals(D_771528780_8_8,936573532)", + "equals(D_486574018_8_8,353358909)", + "equals(D_486574018_8_8,104430631)", + "valueIsOneOf('D_391951010_8_8',223216393,628445697,419220239,858244199)", + "equals(D_779052408_8_8,353358909)", + "equals(D_779052408_8_8,104430631)", + "equals(D_133297530_8_8,353358909)", + "equals(D_133297530_8_8,104430631)", + "greaterThanOrEqual(D_405571048,9)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,9)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,9)))", + "equals(D_391951010_9_9,628445697)", + "equals(D_391951010_9_9,419220239)", + "or(equals(D_391951010_9_9,223216393),equals(D_391951010_9_9,628445697))", + "equals(D_391951010_9_9,223216393)", + "equals(D_391951010_9_9,306890578)", + "equals(D_391951010_9_9,858244199)", + "equals(D_391951010_9_9,746038746)", + "valueIsOneOf('D_391951010_9_9',628445697,419220239)", + "equals(D_281494550_9_9,582602017)", + "equals(D_281494550_9_9,105727261)", + "equals(D_281494550_9_9,720288326)", + "valueIsOneOf('D_391951010_9_9',223216393,628445697,419220239)", + "equals(D_771528780_9_9,660308254)", + "equals(D_771528780_9_9,936573532)", + "equals(D_486574018_9_9,353358909)", + "equals(D_486574018_9_9,104430631)", + "valueIsOneOf('D_391951010_9_9',223216393,628445697,419220239,858244199)", + "equals(D_779052408_9_9,353358909)", + "equals(D_779052408_9_9,104430631)", + "equals(D_133297530_9_9,353358909)", + "equals(D_133297530_9_9,104430631)", + "greaterThanOrEqual(D_405571048,10)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,10)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,10)))", + "equals(D_391951010_10_10,628445697)", + "equals(D_391951010_10_10,419220239)", + "or(equals(D_391951010_10_10,223216393),equals(D_391951010_10_10,628445697))", + "equals(D_391951010_10_10,223216393)", + "equals(D_391951010_10_10,306890578)", + "equals(D_391951010_10_10,858244199)", + "equals(D_391951010_10_10,746038746)", + "valueIsOneOf('D_391951010_10_10',628445697,419220239)", + "equals(D_281494550_10_10,582602017)", + "equals(D_281494550_10_10,105727261)", + "equals(D_281494550_10_10,720288326)", + "valueIsOneOf('D_391951010_10_10',223216393,628445697,419220239)", + "equals(D_771528780_10_10,660308254)", + "equals(D_771528780_10_10,936573532)", + "equals(D_486574018_10_10,353358909)", + "equals(D_486574018_10_10,104430631)", + "valueIsOneOf('D_391951010_10_10',223216393,628445697,419220239,858244199)", + "equals(D_779052408_10_10,353358909)", + "equals(D_779052408_10_10,104430631)", + "equals(D_133297530_10_10,353358909)", + "equals(D_133297530_10_10,104430631)", + "greaterThanOrEqual(D_405571048,11)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,11)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,11)))", + "equals(D_391951010_11_11,628445697)", + "equals(D_391951010_11_11,419220239)", + "or(equals(D_391951010_11_11,223216393),equals(D_391951010_11_11,628445697))", + "equals(D_391951010_11_11,223216393)", + "equals(D_391951010_11_11,306890578)", + "equals(D_391951010_11_11,858244199)", + "equals(D_391951010_11_11,746038746)", + "valueIsOneOf('D_391951010_11_11',628445697,419220239)", + "equals(D_281494550_11_11,582602017)", + "equals(D_281494550_11_11,105727261)", + "equals(D_281494550_11_11,720288326)", + "valueIsOneOf('D_391951010_11_11',223216393,628445697,419220239)", + "equals(D_771528780_11_11,660308254)", + "equals(D_771528780_11_11,936573532)", + "equals(D_486574018_11_11,353358909)", + "equals(D_486574018_11_11,104430631)", + "valueIsOneOf('D_391951010_11_11',223216393,628445697,419220239,858244199)", + "equals(D_779052408_11_11,353358909)", + "equals(D_779052408_11_11,104430631)", + "equals(D_133297530_11_11,353358909)", + "equals(D_133297530_11_11,104430631)", + "greaterThanOrEqual(D_405571048,12)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,12)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,12)))", + "equals(D_391951010_12_12,628445697)", + "equals(D_391951010_12_12,419220239)", + "or(equals(D_391951010_12_12,223216393),equals(D_391951010_12_12,628445697))", + "equals(D_391951010_12_12,223216393)", + "equals(D_391951010_12_12,306890578)", + "equals(D_391951010_12_12,858244199)", + "equals(D_391951010_12_12,746038746)", + "valueIsOneOf('D_391951010_12_12',628445697,419220239)", + "equals(D_281494550_12_12,582602017)", + "equals(D_281494550_12_12,105727261)", + "equals(D_281494550_12_12,720288326)", + "valueIsOneOf('D_391951010_12_12',223216393,628445697,419220239)", + "equals(D_771528780_12_12,660308254)", + "equals(D_771528780_12_12,936573532)", + "equals(D_486574018_12_12,353358909)", + "equals(D_486574018_12_12,104430631)", + "valueIsOneOf('D_391951010_12_12',223216393,628445697,419220239,858244199)", + "equals(D_779052408_12_12,353358909)", + "equals(D_779052408_12_12,104430631)", + "equals(D_133297530_12_12,353358909)", + "equals(D_133297530_12_12,104430631)", + "greaterThanOrEqual(D_405571048,13)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,13)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,13)))", + "equals(D_391951010_13_13,628445697)", + "equals(D_391951010_13_13,419220239)", + "or(equals(D_391951010_13_13,223216393),equals(D_391951010_13_13,628445697))", + "equals(D_391951010_13_13,223216393)", + "equals(D_391951010_13_13,306890578)", + "equals(D_391951010_13_13,858244199)", + "equals(D_391951010_13_13,746038746)", + "valueIsOneOf('D_391951010_13_13',628445697,419220239)", + "equals(D_281494550_13_13,582602017)", + "equals(D_281494550_13_13,105727261)", + "equals(D_281494550_13_13,720288326)", + "valueIsOneOf('D_391951010_13_13',223216393,628445697,419220239)", + "equals(D_771528780_13_13,660308254)", + "equals(D_771528780_13_13,936573532)", + "equals(D_486574018_13_13,353358909)", + "equals(D_486574018_13_13,104430631)", + "valueIsOneOf('D_391951010_13_13',223216393,628445697,419220239,858244199)", + "equals(D_779052408_13_13,353358909)", + "equals(D_779052408_13_13,104430631)", + "equals(D_133297530_13_13,353358909)", + "equals(D_133297530_13_13,104430631)", + "greaterThanOrEqual(D_405571048,14)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,14)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,14)))", + "equals(D_391951010_14_14,628445697)", + "equals(D_391951010_14_14,419220239)", + "or(equals(D_391951010_14_14,223216393),equals(D_391951010_14_14,628445697))", + "equals(D_391951010_14_14,223216393)", + "equals(D_391951010_14_14,306890578)", + "equals(D_391951010_14_14,858244199)", + "equals(D_391951010_14_14,746038746)", + "valueIsOneOf('D_391951010_14_14',628445697,419220239)", + "equals(D_281494550_14_14,582602017)", + "equals(D_281494550_14_14,105727261)", + "equals(D_281494550_14_14,720288326)", + "valueIsOneOf('D_391951010_14_14',223216393,628445697,419220239)", + "equals(D_771528780_14_14,660308254)", + "equals(D_771528780_14_14,936573532)", + "equals(D_486574018_14_14,353358909)", + "equals(D_486574018_14_14,104430631)", + "valueIsOneOf('D_391951010_14_14',223216393,628445697,419220239,858244199)", + "equals(D_779052408_14_14,353358909)", + "equals(D_779052408_14_14,104430631)", + "equals(D_133297530_14_14,353358909)", + "equals(D_133297530_14_14,104430631)", + "greaterThanOrEqual(D_405571048,15)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,15)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,15)))", + "equals(D_391951010_15_15,628445697)", + "equals(D_391951010_15_15,419220239)", + "or(equals(D_391951010_15_15,223216393),equals(D_391951010_15_15,628445697))", + "equals(D_391951010_15_15,223216393)", + "equals(D_391951010_15_15,306890578)", + "equals(D_391951010_15_15,858244199)", + "equals(D_391951010_15_15,746038746)", + "valueIsOneOf('D_391951010_15_15',628445697,419220239)", + "equals(D_281494550_15_15,582602017)", + "equals(D_281494550_15_15,105727261)", + "equals(D_281494550_15_15,720288326)", + "valueIsOneOf('D_391951010_15_15',223216393,628445697,419220239)", + "equals(D_771528780_15_15,660308254)", + "equals(D_771528780_15_15,936573532)", + "equals(D_486574018_15_15,353358909)", + "equals(D_486574018_15_15,104430631)", + "valueIsOneOf('D_391951010_15_15',223216393,628445697,419220239,858244199)", + "equals(D_779052408_15_15,353358909)", + "equals(D_779052408_15_15,104430631)", + "equals(D_133297530_15_15,353358909)", + "equals(D_133297530_15_15,104430631)", + "greaterThanOrEqual(D_405571048,16)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,16)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,16)))", + "equals(D_391951010_16_16,628445697)", + "equals(D_391951010_16_16,419220239)", + "or(equals(D_391951010_16_16,223216393),equals(D_391951010_16_16,628445697))", + "equals(D_391951010_16_16,223216393)", + "equals(D_391951010_16_16,306890578)", + "equals(D_391951010_16_16,858244199)", + "equals(D_391951010_16_16,746038746)", + "valueIsOneOf('D_391951010_16_16',628445697,419220239)", + "equals(D_281494550_16_16,582602017)", + "equals(D_281494550_16_16,105727261)", + "equals(D_281494550_16_16,720288326)", + "valueIsOneOf('D_391951010_16_16',223216393,628445697,419220239)", + "equals(D_771528780_16_16,660308254)", + "equals(D_771528780_16_16,936573532)", + "equals(D_486574018_16_16,353358909)", + "equals(D_486574018_16_16,104430631)", + "valueIsOneOf('D_391951010_16_16',223216393,628445697,419220239,858244199)", + "equals(D_779052408_16_16,353358909)", + "equals(D_779052408_16_16,104430631)", + "equals(D_133297530_16_16,353358909)", + "equals(D_133297530_16_16,104430631)", + "greaterThanOrEqual(D_405571048,17)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,17)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,17)))", + "equals(D_391951010_17_17,628445697)", + "equals(D_391951010_17_17,419220239)", + "or(equals(D_391951010_17_17,223216393),equals(D_391951010_17_17,628445697))", + "equals(D_391951010_17_17,223216393)", + "equals(D_391951010_17_17,306890578)", + "equals(D_391951010_17_17,858244199)", + "equals(D_391951010_17_17,746038746)", + "valueIsOneOf('D_391951010_17_17',628445697,419220239)", + "equals(D_281494550_17_17,582602017)", + "equals(D_281494550_17_17,105727261)", + "equals(D_281494550_17_17,720288326)", + "valueIsOneOf('D_391951010_17_17',223216393,628445697,419220239)", + "equals(D_771528780_17_17,660308254)", + "equals(D_771528780_17_17,936573532)", + "equals(D_486574018_17_17,353358909)", + "equals(D_486574018_17_17,104430631)", + "valueIsOneOf('D_391951010_17_17',223216393,628445697,419220239,858244199)", + "equals(D_779052408_17_17,353358909)", + "equals(D_779052408_17_17,104430631)", + "equals(D_133297530_17_17,353358909)", + "equals(D_133297530_17_17,104430631)", + "greaterThanOrEqual(D_405571048,18)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,18)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,18)))", + "equals(D_391951010_18_18,628445697)", + "equals(D_391951010_18_18,419220239)", + "or(equals(D_391951010_18_18,223216393),equals(D_391951010_18_18,628445697))", + "equals(D_391951010_18_18,223216393)", + "equals(D_391951010_18_18,306890578)", + "equals(D_391951010_18_18,858244199)", + "equals(D_391951010_18_18,746038746)", + "valueIsOneOf('D_391951010_18_18',628445697,419220239)", + "equals(D_281494550_18_18,582602017)", + "equals(D_281494550_18_18,105727261)", + "equals(D_281494550_18_18,720288326)", + "valueIsOneOf('D_391951010_18_18',223216393,628445697,419220239)", + "equals(D_771528780_18_18,660308254)", + "equals(D_771528780_18_18,936573532)", + "equals(D_486574018_18_18,353358909)", + "equals(D_486574018_18_18,104430631)", + "valueIsOneOf('D_391951010_18_18',223216393,628445697,419220239,858244199)", + "equals(D_779052408_18_18,353358909)", + "equals(D_779052408_18_18,104430631)", + "equals(D_133297530_18_18,353358909)", + "equals(D_133297530_18_18,104430631)", + "greaterThanOrEqual(D_405571048,19)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,19)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,19)))", + "equals(D_391951010_19_19,628445697)", + "equals(D_391951010_19_19,419220239)", + "or(equals(D_391951010_19_19,223216393),equals(D_391951010_19_19,628445697))", + "equals(D_391951010_19_19,223216393)", + "equals(D_391951010_19_19,306890578)", + "equals(D_391951010_19_19,858244199)", + "equals(D_391951010_19_19,746038746)", + "valueIsOneOf('D_391951010_19_19',628445697,419220239)", + "equals(D_281494550_19_19,582602017)", + "equals(D_281494550_19_19,105727261)", + "equals(D_281494550_19_19,720288326)", + "valueIsOneOf('D_391951010_19_19',223216393,628445697,419220239)", + "equals(D_771528780_19_19,660308254)", + "equals(D_771528780_19_19,936573532)", + "equals(D_486574018_19_19,353358909)", + "equals(D_486574018_19_19,104430631)", + "valueIsOneOf('D_391951010_19_19',223216393,628445697,419220239,858244199)", + "equals(D_779052408_19_19,353358909)", + "equals(D_779052408_19_19,104430631)", + "equals(D_133297530_19_19,353358909)", + "equals(D_133297530_19_19,104430631)", + "greaterThanOrEqual(D_405571048,20)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,20)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,20)))", + "equals(D_391951010_20_20,628445697)", + "equals(D_391951010_20_20,419220239)", + "or(equals(D_391951010_20_20,223216393),equals(D_391951010_20_20,628445697))", + "equals(D_391951010_20_20,223216393)", + "equals(D_391951010_20_20,306890578)", + "equals(D_391951010_20_20,858244199)", + "equals(D_391951010_20_20,746038746)", + "valueIsOneOf('D_391951010_20_20',628445697,419220239)", + "equals(D_281494550_20_20,582602017)", + "equals(D_281494550_20_20,105727261)", + "equals(D_281494550_20_20,720288326)", + "valueIsOneOf('D_391951010_20_20',223216393,628445697,419220239)", + "equals(D_771528780_20_20,660308254)", + "equals(D_771528780_20_20,936573532)", + "equals(D_486574018_20_20,353358909)", + "equals(D_486574018_20_20,104430631)", + "valueIsOneOf('D_391951010_20_20',223216393,628445697,419220239,858244199)", + "equals(D_779052408_20_20,353358909)", + "equals(D_779052408_20_20,104430631)", + "equals(D_133297530_20_20,353358909)", + "equals(D_133297530_20_20,104430631)", + "greaterThanOrEqual(D_405571048,21)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,21)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,21)))", + "equals(D_391951010_21_21,628445697)", + "equals(D_391951010_21_21,419220239)", + "or(equals(D_391951010_21_21,223216393),equals(D_391951010_21_21,628445697))", + "equals(D_391951010_21_21,223216393)", + "equals(D_391951010_21_21,306890578)", + "equals(D_391951010_21_21,858244199)", + "equals(D_391951010_21_21,746038746)", + "valueIsOneOf('D_391951010_21_21',628445697,419220239)", + "equals(D_281494550_21_21,582602017)", + "equals(D_281494550_21_21,105727261)", + "equals(D_281494550_21_21,720288326)", + "valueIsOneOf('D_391951010_21_21',223216393,628445697,419220239)", + "equals(D_771528780_21_21,660308254)", + "equals(D_771528780_21_21,936573532)", + "equals(D_486574018_21_21,353358909)", + "equals(D_486574018_21_21,104430631)", + "valueIsOneOf('D_391951010_21_21',223216393,628445697,419220239,858244199)", + "equals(D_779052408_21_21,353358909)", + "equals(D_779052408_21_21,104430631)", + "equals(D_133297530_21_21,353358909)", + "equals(D_133297530_21_21,104430631)", + "greaterThanOrEqual(D_405571048,22)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,22)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,22)))", + "equals(D_391951010_22_22,628445697)", + "equals(D_391951010_22_22,419220239)", + "or(equals(D_391951010_22_22,223216393),equals(D_391951010_22_22,628445697))", + "equals(D_391951010_22_22,223216393)", + "equals(D_391951010_22_22,306890578)", + "equals(D_391951010_22_22,858244199)", + "equals(D_391951010_22_22,746038746)", + "valueIsOneOf('D_391951010_22_22',628445697,419220239)", + "equals(D_281494550_22_22,582602017)", + "equals(D_281494550_22_22,105727261)", + "equals(D_281494550_22_22,720288326)", + "valueIsOneOf('D_391951010_22_22',223216393,628445697,419220239)", + "equals(D_771528780_22_22,660308254)", + "equals(D_771528780_22_22,936573532)", + "equals(D_486574018_22_22,353358909)", + "equals(D_486574018_22_22,104430631)", + "valueIsOneOf('D_391951010_22_22',223216393,628445697,419220239,858244199)", + "equals(D_779052408_22_22,353358909)", + "equals(D_779052408_22_22,104430631)", + "equals(D_133297530_22_22,353358909)", + "equals(D_133297530_22_22,104430631)", + "greaterThanOrEqual(D_405571048,23)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,23)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,23)))", + "equals(D_391951010_23_23,628445697)", + "equals(D_391951010_23_23,419220239)", + "or(equals(D_391951010_23_23,223216393),equals(D_391951010_23_23,628445697))", + "equals(D_391951010_23_23,223216393)", + "equals(D_391951010_23_23,306890578)", + "equals(D_391951010_23_23,858244199)", + "equals(D_391951010_23_23,746038746)", + "valueIsOneOf('D_391951010_23_23',628445697,419220239)", + "equals(D_281494550_23_23,582602017)", + "equals(D_281494550_23_23,105727261)", + "equals(D_281494550_23_23,720288326)", + "valueIsOneOf('D_391951010_23_23',223216393,628445697,419220239)", + "equals(D_771528780_23_23,660308254)", + "equals(D_771528780_23_23,936573532)", + "equals(D_486574018_23_23,353358909)", + "equals(D_486574018_23_23,104430631)", + "valueIsOneOf('D_391951010_23_23',223216393,628445697,419220239,858244199)", + "equals(D_779052408_23_23,353358909)", + "equals(D_779052408_23_23,104430631)", + "equals(D_133297530_23_23,353358909)", + "equals(D_133297530_23_23,104430631)", + "greaterThanOrEqual(D_405571048,24)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,24)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,24)))", + "equals(D_391951010_24_24,628445697)", + "equals(D_391951010_24_24,419220239)", + "or(equals(D_391951010_24_24,223216393),equals(D_391951010_24_24,628445697))", + "equals(D_391951010_24_24,223216393)", + "equals(D_391951010_24_24,306890578)", + "equals(D_391951010_24_24,858244199)", + "equals(D_391951010_24_24,746038746)", + "valueIsOneOf('D_391951010_24_24',628445697,419220239)", + "equals(D_281494550_24_24,582602017)", + "equals(D_281494550_24_24,105727261)", + "equals(D_281494550_24_24,720288326)", + "valueIsOneOf('D_391951010_24_24',223216393,628445697,419220239)", + "equals(D_771528780_24_24,660308254)", + "equals(D_771528780_24_24,936573532)", + "equals(D_486574018_24_24,353358909)", + "equals(D_486574018_24_24,104430631)", + "valueIsOneOf('D_391951010_24_24',223216393,628445697,419220239,858244199)", + "equals(D_779052408_24_24,353358909)", + "equals(D_779052408_24_24,104430631)", + "equals(D_133297530_24_24,353358909)", + "equals(D_133297530_24_24,104430631)", + "greaterThanOrEqual(D_405571048,25)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,25)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,25)))", + "equals(D_391951010_25_25,628445697)", + "equals(D_391951010_25_25,419220239)", + "or(equals(D_391951010_25_25,223216393),equals(D_391951010_25_25,628445697))", + "equals(D_391951010_25_25,223216393)", + "equals(D_391951010_25_25,306890578)", + "equals(D_391951010_25_25,858244199)", + "equals(D_391951010_25_25,746038746)", + "valueIsOneOf('D_391951010_25_25',628445697,419220239)", + "equals(D_281494550_25_25,582602017)", + "equals(D_281494550_25_25,105727261)", + "equals(D_281494550_25_25,720288326)", + "valueIsOneOf('D_391951010_25_25',223216393,628445697,419220239)", + "equals(D_771528780_25_25,660308254)", + "equals(D_771528780_25_25,936573532)", + "equals(D_486574018_25_25,353358909)", + "equals(D_486574018_25_25,104430631)", + "valueIsOneOf('D_391951010_25_25',223216393,628445697,419220239,858244199)", + "equals(D_779052408_25_25,353358909)", + "equals(D_779052408_25_25,104430631)", + "equals(D_133297530_25_25,353358909)", + "equals(D_133297530_25_25,104430631)", + "exists('D_762700622')", + "doesNotExist('D_762700622')", + "equals(D_668834883,246843973)", + "equals(D_668834883,854184254)", + "equals(D_668834883,515434780)", + "equals(D_668834883,674148137)", + "valueIsOneOf(\"D_668834883\",807835037) or valueLength(\"D_640559281\")>0", + "valueLength('D_640559281')>0", + "valueLength('D_640559281')==0", + "equals(D_800943768,687050279)", + "valueIsOneOf(\"D_800943768\",807835037) or valueLength(\"D_235516216\")>0", + "valueLength('D_235516216')>0", + "valueLength('D_235516216')==0", + "equals(D_263785082,837393880)", + "equals(D_263785082,944874693)", + "valueIsOneOf(\"D_263785082\",807835037) or valueLength(\"D_542108835\")>0", + "valueLength('D_542108835')>0", + "valueLength('D_542108835')==0", + "or(equals(D_946849196,729863969),or(equals(D_946849196,108104748),or(equals(D_946849196,717308596),or(equals(D_946849196,746788766),or(equals(D_946849196,158214723),doesNotEqual(D_946849196,658810736))))))", + "exists('D_557526470')", + "doesNotExist('D_557526470')", + "equals(D_613744428,353358909)", + "valueEquals(\"D_613744428\",353358909)", + "equals(\"D_613744428\",353358909)", + "someSelected(\"D_980120253_1\",\"D_980120253_2\",\"D_980120253_3\",\"D_980120253_4\",\"D_980120253_5\",\"D_980120253_6\",\"D_993029890_1\",\"D_993029890_2\",\"D_993029890_3\",\"D_993029890_4\",\"D_993029890_5\",\"D_993029890_6\",\"D_980196073_1\",\"D_980196073_2\",\"D_980196073_3\",\"D_980196073_4\",\"D_980196073_5\",\"D_980196073_6\",\"D_115422925_1\",\"D_115422925_2\",\"D_115422925_3\",\"D_115422925_4\",\"D_115422925_5\",\"D_115422925_6\",\"D_151161693_1\",\"D_151161693_2\",\"D_151161693_3\",\"D_151161693_4\",\"D_151161693_5\",\"D_151161693_6\")", + "someSelected(%22D_980120253_1%22%2C%22D_980120253_2%22%2C%22D_980120253_3%22%2C%22D_980120253_4%22%2C%22D_980120253_5%22%2C%22D_980120253_6%22)", + "someSelected(%22D_993029890_1%22%2C%22D_993029890_2%22%2C%22D_993029890_3%22%2C%22D_993029890_4%22%2C%22D_993029890_5%22%2C%22D_993029890_6%22)", + "someSelected(%22D_980196073_1%22%2C%22D_980196073_2%22%2C%22D_980196073_3%22%2C%22D_980196073_4%22%2C%22D_980196073_5%22%2C%22D_980196073_6%22)", + "someSelected(%22D_115422925_1%22%2C%22D_115422925_2%22%2C%22D_115422925_3%22%2C%22D_115422925_4%22%2C%22D_115422925_5%22%2C%22D_115422925_6%22)", + "someSelected(%22D_151161693_1%22%2C%22D_151161693_2%22%2C%22D_151161693_3%22%2C%22D_151161693_4%22%2C%22D_151161693_5%22%2C%22D_151161693_6%22)", + "equals(D_204421360,797221287)", + "doesNotEqual(numberOfChoicesSelected(D_442059084,0),1)", + "equals(D_204421360,500744195)", + "doesNotEqual(numberOfChoicesSelected(D_829749579,0),1)", + "equals(D_204421360,383015037)", + "doesNotEqual(numberOfChoicesSelected(D_618482103,0),1)", + "equals(D_517976064,904954920)", + "doesNotEqual(numberOfChoicesSelected(D_894610280,0),1)", + "equals(D_517976064,619501806)", + "doesNotEqual(numberOfChoicesSelected(D_222110888,0),1)", + "equals(D_517976064,203192394)", + "doesNotEqual(numberOfChoicesSelected(D_564242877,0),1)", + "equals(D_517976064,261267696)", + "doesNotEqual(numberOfChoicesSelected(D_635874413,0),1)", + "equals(D_517976064,926584500)", + "doesNotEqual(numberOfChoicesSelected(D_371748514,0),1)", + "equals(D_517976064,420058896)", + "doesNotEqual(numberOfChoicesSelected(D_858525957,0),1)", + "equals(D_517976064,868685663)", + "doesNotEqual(numberOfChoicesSelected(D_787591805,0),1)", + "equals(D_517976064,760484278)", + "doesNotEqual(numberOfChoicesSelected(D_900299856,0),1)", + "equals(D_517976064,345916806)", + "doesNotEqual(numberOfChoicesSelected(D_149884127,0),1)", + "equals(D_517976064,936042582)", + "doesNotEqual(numberOfChoicesSelected(D_845164425,0),1)", + "equals(D_517976064,182827107)", + "doesNotEqual(numberOfChoicesSelected(D_187772368,0),1)", + "equals(D_517976064,734860227)", + "doesNotEqual(numberOfChoicesSelected(D_815229596,0),1)", + "equals(D_517976064,371531887)", + "doesNotEqual(numberOfChoicesSelected(D_262305264,0),1)", + "equals(D_517976064,423631576)", + "doesNotEqual(numberOfChoicesSelected(D_409324592,0),1)", + "equals(D_517976064,181769837)", + "doesNotEqual(numberOfChoicesSelected(D_895837106,0),1)", + "equals(D_591723682,353358909)", + "doesNotEqual(D_591723682,353358909)", + "equals(D_479628567,370923702)", + "equals(D_674976924,958538953)", + "equals(D_674976924,274062548)" + ], + "sitesByScope": { + "grid-inline": 3, + "grid-row": 5, + "inline": 990, + "question": 362, + "response": 7 + }, + "sitesByAttribute": { + "data-displayif": 5, + "displayif": 1362 + } + }, + "grids": [ + { + "questionId": "D_392658845", + "questionIndex": 452, + "rowQuestionIds": [ + "D_699101535", + "D_652561589", + "D_589522790", + "D_239572239" + ], + "rowCount": 4, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "503218834", + "464753847", + "729681071", + "258023209", + "638092100", + "628177728", + "919739344", + "755558825", + "949555271", + "201002865" + ] + }, + { + "questionId": "D_649352910", + "questionIndex": 454, + "rowQuestionIds": [ + "D_654385712", + "D_263483736", + "D_806746224", + "D_396649512" + ], + "rowCount": 4, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "503218834", + "464753847", + "729681071", + "258023209", + "638092100", + "628177728", + "919739344", + "755558825", + "949555271", + "201002865" + ] + }, + { + "questionId": "D_733547268", + "questionIndex": 456, + "rowQuestionIds": [ + "D_980120253", + "D_993029890", + "D_980196073", + "D_115422925", + "D_151161693" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "648960871", + "239152340", + "582006876", + "645894551", + "996315715", + "671267928", + "647504893" + ] + }, + { + "questionId": "D_128705365", + "questionIndex": 457, + "rowQuestionIds": [ + "D_607323377", + "D_491484323", + "D_588637585", + "D_199039940", + "D_986476579" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "428999623", + "248303092", + "206020811", + "264163865", + "638092100", + "628177728", + "805918496" + ] + }, + { + "questionId": "D_421859821", + "questionIndex": 536, + "rowQuestionIds": [ + "D_220238240", + "D_151006826", + "D_965290070", + "D_781115321", + "D_453071098", + "D_513065503", + "D_257137378" + ], + "rowCount": 7, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "104430631", + "525779785", + "565036180", + "284343405", + "270994579" + ] + }, + { + "questionId": "D_981441822", + "questionIndex": 538, + "rowQuestionIds": [ + "D_403155173", + "D_576621769", + "D_988508028", + "D_186488870", + "D_922388461", + "D_760686611", + "D_354550061", + "D_179705366", + "D_955609858" + ], + "rowCount": 9, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "514068832", + "774439579", + "747099514", + "977681388" + ] + } + ], + "loops": [ + { + "loopIndex": "1", + "loopMaxQuestionIds": [ + "D_405571048" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 104, + 113, + 122, + 131, + 140, + 149, + 158, + 167, + 176, + 185, + 194, + 203, + 212, + 221, + 230, + 239, + 248, + 257, + 266, + 275, + 284, + 293, + 302, + 311, + 320 + ], + "boundaryIndex": 329 + } + ], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 359, + "processorQuestionCount": 554, + "processedQuestionCount": 554, + "renderedFormCount": 554, + "controlCount": 3460, + "responseControlCount": 1600, + "explicitTransitionCount": 558, + "sequentialAdjacencyCount": 553, + "resolvedExplicitTransitionCount": 558, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 1367, + "gridQuestionCount": 6, + "gridRowCount": 34, + "loopStartCount": 25, + "loopDefinitionCount": 1, + "loopExpandedQuestionCount": 225, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 654 + } + }, + { + "schemaVersion": 1, + "module": "module2024ConnectExperience", + "locale": "en", + "language": "en", + "path": "prod/module2024ConnectExperience.txt", + "sha256": "70f70eb07acec537f634c96b66c29596e68baee11812f367bfc89317cb818fe7", + "questName": "D_506648060", + "version": "1.1", + "authoredMarkerCount": 43, + "runtimeQuestionIds": [ + "SRVPES_PESINTRO_V1R0", + "D_145727599?", + "D_470013848?", + "D_731524314?", + "D_403175318?", + "D_260186214?", + "D_210120853?", + "D_875017278?", + "D_630940888?", + "D_575160226?", + "D_646060480?", + "D_579939641?", + "D_549970786?", + "SRVPES_SECTION2_V1R0", + "D_124830305?", + "D_972944307?", + "D_394328384?", + "SRVPES_SECTION3_V1R0", + "D_586132480?", + "D_886084185?", + "D_945546878?", + "D_363878103?", + "SRVPES_SECTION4_V1R0", + "D_472709337?", + "D_890945599?", + "D_465287908?", + "D_956625094?", + "D_476960744?", + "D_355080680?", + "D_307813936?", + "D_800057241?", + "D_649713579?", + "D_943119849?", + "D_496748977?", + "D_482763096?", + "SRVPES_SECTION5_V1R0", + "D_176469609?", + "D_210983898?", + "D_228922812?", + "SRVPES_WHYINTRO_V1R0", + "D_960544981?", + "D_674994176?", + "END" + ], + "responseControlsByType": { + "checkbox": 49, + "radio": 83, + "text": 15 + }, + "explicitTransitions": { + "targets": [ + "D_210120853", + "D_646060480", + "D_575160226", + "D_579939641", + "D_549970786", + "D_945546878", + "D_465287908", + "D_943119849", + "D_496748977" + ], + "byKind": { + "no-response": 6, + "response": 10 + }, + "byResolution": { + "exact": 16 + }, + "triggerTypes": { + "hidden": 6, + "radio": 10 + }, + "triggerValues": [ + "104430631", + "353358909", + "198030665", + "178420302" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_145727599,386252749)", + "equals(D_145727599,153962804)", + "equals(D_145727599,188067494)", + "selectionCount(\"D_470013848\") + selectionCount(\"D_731524314\") + selectionCount(\"D_403175318\")>1", + "equals(D_470013848,482753957)", + "equals(D_470013848,358413399)", + "equals(D_470013848,807835037)", + "doesNotExist('D_495052121')", + "equals(D_731524314,515798638)", + "equals(D_731524314,132115595)", + "equals(D_731524314,299722216)", + "equals(D_731524314,115959973)", + "equals(D_731524314,238237869)", + "equals(D_731524314,985034149)", + "equals(D_731524314,807835037)", + "doesNotExist('D_638847244')", + "equals(D_403175318,798682161)", + "equals(D_403175318,554920493)", + "equals(D_403175318,200962909)", + "equals(D_403175318,807835037)", + "doesNotExist('D_507471937')", + "equals(D_630940888,353358909)", + "equals(D_646060480,104430631)", + "or(equals(D_586132480,333628672),equals(D_586132480,687057737))", + "equals(D_472709337,353358909)", + "equals(D_307813936,353358909)", + "equals(D_307813936,104430631)" + ], + "sitesByScope": { + "inline": 3, + "question": 11, + "response": 14 + }, + "sitesByAttribute": { + "displayif": 28 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 43, + "processorQuestionCount": 43, + "processedQuestionCount": 43, + "renderedFormCount": 43, + "controlCount": 274, + "responseControlCount": 147, + "explicitTransitionCount": 16, + "sequentialAdjacencyCount": 42, + "resolvedExplicitTransitionCount": 16, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 28, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 27 + } + }, + { + "schemaVersion": 1, + "module": "module2024ConnectExperience", + "locale": "es", + "language": "es", + "path": "prod/module2024ConnectExperienceSpanish.txt", + "sha256": "1bb9757b35913beca279af01bb99ee9c776684fbf7d056289f71c898e5cfef9f", + "questName": "D_506648060", + "version": "1.1", + "authoredMarkerCount": 43, + "runtimeQuestionIds": [ + "SRVPES_PESINTRO_V1R0", + "D_145727599?", + "D_470013848?", + "D_731524314?", + "D_403175318?", + "D_260186214?", + "D_210120853?", + "D_875017278?", + "D_630940888?", + "D_575160226?", + "D_646060480?", + "D_579939641?", + "D_549970786?", + "SRVPES_SECTION2_V1R0", + "D_124830305?", + "D_972944307?", + "D_394328384?", + "SRVPES_SECTION3_V1R0", + "D_586132480?", + "D_886084185?", + "D_945546878?", + "D_363878103?", + "SRVPES_SECTION4_V1R0", + "D_472709337?", + "D_890945599?", + "D_465287908?", + "D_956625094?", + "D_476960744?", + "D_355080680?", + "D_307813936?", + "D_800057241?", + "D_649713579?", + "D_943119849?", + "D_496748977?", + "D_482763096?", + "SRVPES_SECTION5_V1R0", + "D_176469609?", + "D_210983898?", + "D_228922812?", + "SRVPES_WHYINTRO_V1R0", + "D_960544981?", + "D_674994176?", + "END" + ], + "responseControlsByType": { + "checkbox": 49, + "radio": 83, + "text": 15 + }, + "explicitTransitions": { + "targets": [ + "D_210120853", + "D_646060480", + "D_575160226", + "D_579939641", + "D_549970786", + "D_945546878", + "D_465287908", + "D_943119849", + "D_496748977" + ], + "byKind": { + "no-response": 6, + "response": 10 + }, + "byResolution": { + "exact": 16 + }, + "triggerTypes": { + "hidden": 6, + "radio": 10 + }, + "triggerValues": [ + "104430631", + "353358909", + "198030665", + "178420302" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_145727599,386252749)", + "equals(D_145727599,153962804)", + "equals(D_145727599,188067494)", + "selectionCount(\"D_470013848\") + selectionCount(\"D_731524314\") + selectionCount(\"D_403175318\")>1", + "equals(D_470013848,482753957)", + "equals(D_470013848,358413399)", + "equals(D_470013848,807835037)", + "doesNotExist('D_495052121')", + "equals(D_731524314,515798638)", + "equals(D_731524314,132115595)", + "equals(D_731524314,299722216)", + "equals(D_731524314,115959973)", + "equals(D_731524314,238237869)", + "equals(D_731524314,985034149)", + "equals(D_731524314,807835037)", + "doesNotExist('D_638847244')", + "equals(D_403175318,798682161)", + "equals(D_403175318,554920493)", + "equals(D_403175318,200962909)", + "equals(D_403175318,807835037)", + "doesNotExist('D_507471937')", + "equals(D_630940888,353358909)", + "equals(D_646060480,104430631)", + "or(equals(D_586132480,333628672),equals(D_586132480,687057737))", + "equals(D_472709337,353358909)", + "equals(D_307813936,353358909)", + "equals(D_307813936,104430631)" + ], + "sitesByScope": { + "inline": 3, + "question": 11, + "response": 14 + }, + "sitesByAttribute": { + "displayif": 28 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 43, + "processorQuestionCount": 43, + "processedQuestionCount": 43, + "renderedFormCount": 43, + "controlCount": 274, + "responseControlCount": 147, + "explicitTransitionCount": 16, + "sequentialAdjacencyCount": 42, + "resolvedExplicitTransitionCount": 16, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 28, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 27 + } + }, + { + "schemaVersion": 1, + "module": "module2026ROIPreferences", + "locale": "en", + "language": "en", + "path": "prod/module2026ROIPreferences.txt", + "sha256": "bb14766a8d7fd626d2234254db78c1c7e84b0503f4734ddafa31239763b160a9", + "questName": "D_312845734", + "version": "1.0", + "authoredMarkerCount": 16, + "runtimeQuestionIds": [ + "INTROPREF", + "INTROGEO", + "D_144761753?", + "D_769359476?", + "INTROINDIVRISK", + "D_863590289?", + "INTROGENETICS", + "D_136941196?", + "INTRORSRCH", + "D_913318697?", + "INTRORSRCHDISC", + "D_486040313?", + "INTRO2RSRCHDISC", + "D_151535519?", + "D_395168461?", + "END" + ], + "responseControlsByType": { + "checkbox": 8, + "radio": 70, + "textarea": 1 + }, + "explicitTransitions": { + "targets": [], + "byKind": {}, + "byResolution": {}, + "triggerTypes": {}, + "triggerValues": [], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [], + "sitesByScope": {}, + "sitesByAttribute": {} + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 16, + "processorQuestionCount": 16, + "processedQuestionCount": 16, + "renderedFormCount": 16, + "controlCount": 118, + "responseControlCount": 79, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 15, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 0 + } + }, + { + "schemaVersion": 1, + "module": "module2026ROIPreferences", + "locale": "es", + "language": "es", + "path": "prod/module2026ROIPreferencesSpanish.txt", + "sha256": "c31cf93e57d0c26fb630b940d906cce1f42440e434dea4049ca46859a8423227", + "questName": "D_312845734", + "version": "1.0", + "authoredMarkerCount": 16, + "runtimeQuestionIds": [ + "INTROPREF", + "INTROGEO", + "D_144761753?", + "D_769359476?", + "INTROINDIVRISK", + "D_863590289?", + "INTROGENETICS", + "D_136941196?", + "INTRORSRCH", + "D_913318697?", + "INTRORSRCHDISC", + "D_486040313?", + "INTRO2RSRCHDISC", + "D_151535519?", + "D_395168461?", + "END" + ], + "responseControlsByType": { + "checkbox": 8, + "radio": 70, + "textarea": 1 + }, + "explicitTransitions": { + "targets": [], + "byKind": {}, + "byResolution": {}, + "triggerTypes": {}, + "triggerValues": [], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [], + "sitesByScope": {}, + "sitesByAttribute": {} + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 16, + "processorQuestionCount": 16, + "processedQuestionCount": 16, + "renderedFormCount": 16, + "controlCount": 117, + "responseControlCount": 79, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 15, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 0 + } + }, + { + "schemaVersion": 1, + "module": "module2", + "locale": "es", + "language": "es", + "path": "prod/module2Spanish.txt", + "sha256": "c8545d3286b47909c9f9048df73467459cccabbeb7dfe7676756ea9474164bb5", + "questName": "D_745268907_V2", + "version": "2.3", + "authoredMarkerCount": 360, + "runtimeQuestionIds": [ + "INTROM2", + "SECTION1", + "D_399982309?", + "D_861838892?", + "D_596961796?", + "D_113681507?", + "D_177526169?", + "D_564374538?", + "D_643807999?", + "D_837412550?", + "D_825189914?", + "D_615979584?", + "D_814141708?", + "D_265428345?", + "D_275143071?", + "D_388804810?", + "D_753416375?", + "D_771526486?", + "D_292658699?", + "D_491549803?", + "D_152138929?", + "D_614446276?", + "D_646042915?", + "D_270254670?", + "D_861824298?", + "D_846227588?", + "D_630231395?", + "D_234177873?", + "D_799338907?", + "D_376720409?", + "D_575646308?", + "D_798182168?", + "D_655266993?", + "D_248599913?", + "D_893965588?", + "D_439072744?", + "D_733861762?", + "D_322479862?", + "D_509383583?", + "D_697661603?", + "D_438682764?", + "D_445571225?", + "D_761822652?", + "D_737490587?", + "D_887435355?", + "D_414005872?", + "D_614123836?", + "D_731790154?", + "D_550092533?", + "D_163057677?", + "D_225047594?", + "D_297084062?", + "D_305292465?", + "D_901498441?", + "D_147792229?", + "D_976052812?", + "D_991427384?", + "D_112024853?", + "D_694817520?", + "D_991622246?", + "D_450131058?", + "D_991873978?", + "D_371176229?", + "D_982448213?", + "D_745223146?", + "D_273218182?", + "D_850202336?", + "D_799903478?", + "D_465635548?", + "D_556235252?", + "D_643361372?", + "D_172234651?", + "D_753610471?", + "D_424183977?", + "D_824287808?", + "D_889053435?", + "D_416865817?", + "D_803968511?", + "D_378572291?", + "D_846978339?", + "D_936366310?", + "D_266752903?", + "D_618427836?", + "D_774514900?", + "D_368595692?", + "D_497904005?", + "SECTION2", + "SECTION2_SKIPPED", + "INTROWH", + "INTROMENSHIS", + "D_496539718?", + "D_167997205?", + "D_972593606?", + "D_791830593?", + "INTROMENSHIS2", + "D_547633480?", + "D_164595895?", + "D_263114971?", + "D_614145455?", + "D_534920374?", + "PREG", + "D_849945160?", + "D_996243083?", + "D_405571048!", + "D_968816827_1_1?", + "D_391951010_1_1?", + "D_281494550_1_1?", + "D_771528780_1_1?", + "D_486574018_1_1?", + "D_278277373_1_1?", + "D_779052408_1_1?", + "D_133297530_1_1?", + "PREGSUMMARY_1_1", + "D_968816827_2_2?", + "D_391951010_2_2?", + "D_281494550_2_2?", + "D_771528780_2_2?", + "D_486574018_2_2?", + "D_278277373_2_2?", + "D_779052408_2_2?", + "D_133297530_2_2?", + "PREGSUMMARY_2_2", + "D_968816827_3_3?", + "D_391951010_3_3?", + "D_281494550_3_3?", + "D_771528780_3_3?", + "D_486574018_3_3?", + "D_278277373_3_3?", + "D_779052408_3_3?", + "D_133297530_3_3?", + "PREGSUMMARY_3_3", + "D_968816827_4_4?", + "D_391951010_4_4?", + "D_281494550_4_4?", + "D_771528780_4_4?", + "D_486574018_4_4?", + "D_278277373_4_4?", + "D_779052408_4_4?", + "D_133297530_4_4?", + "PREGSUMMARY_4_4", + "D_968816827_5_5?", + "D_391951010_5_5?", + "D_281494550_5_5?", + "D_771528780_5_5?", + "D_486574018_5_5?", + "D_278277373_5_5?", + "D_779052408_5_5?", + "D_133297530_5_5?", + "PREGSUMMARY_5_5", + "D_968816827_6_6?", + "D_391951010_6_6?", + "D_281494550_6_6?", + "D_771528780_6_6?", + "D_486574018_6_6?", + "D_278277373_6_6?", + "D_779052408_6_6?", + "D_133297530_6_6?", + "PREGSUMMARY_6_6", + "D_968816827_7_7?", + "D_391951010_7_7?", + "D_281494550_7_7?", + "D_771528780_7_7?", + "D_486574018_7_7?", + "D_278277373_7_7?", + "D_779052408_7_7?", + "D_133297530_7_7?", + "PREGSUMMARY_7_7", + "D_968816827_8_8?", + "D_391951010_8_8?", + "D_281494550_8_8?", + "D_771528780_8_8?", + "D_486574018_8_8?", + "D_278277373_8_8?", + "D_779052408_8_8?", + "D_133297530_8_8?", + "PREGSUMMARY_8_8", + "D_968816827_9_9?", + "D_391951010_9_9?", + "D_281494550_9_9?", + "D_771528780_9_9?", + "D_486574018_9_9?", + "D_278277373_9_9?", + "D_779052408_9_9?", + "D_133297530_9_9?", + "PREGSUMMARY_9_9", + "D_968816827_10_10?", + "D_391951010_10_10?", + "D_281494550_10_10?", + "D_771528780_10_10?", + "D_486574018_10_10?", + "D_278277373_10_10?", + "D_779052408_10_10?", + "D_133297530_10_10?", + "PREGSUMMARY_10_10", + "D_968816827_11_11?", + "D_391951010_11_11?", + "D_281494550_11_11?", + "D_771528780_11_11?", + "D_486574018_11_11?", + "D_278277373_11_11?", + "D_779052408_11_11?", + "D_133297530_11_11?", + "PREGSUMMARY_11_11", + "D_968816827_12_12?", + "D_391951010_12_12?", + "D_281494550_12_12?", + "D_771528780_12_12?", + "D_486574018_12_12?", + "D_278277373_12_12?", + "D_779052408_12_12?", + "D_133297530_12_12?", + "PREGSUMMARY_12_12", + "D_968816827_13_13?", + "D_391951010_13_13?", + "D_281494550_13_13?", + "D_771528780_13_13?", + "D_486574018_13_13?", + "D_278277373_13_13?", + "D_779052408_13_13?", + "D_133297530_13_13?", + "PREGSUMMARY_13_13", + "D_968816827_14_14?", + "D_391951010_14_14?", + "D_281494550_14_14?", + "D_771528780_14_14?", + "D_486574018_14_14?", + "D_278277373_14_14?", + "D_779052408_14_14?", + "D_133297530_14_14?", + "PREGSUMMARY_14_14", + "D_968816827_15_15?", + "D_391951010_15_15?", + "D_281494550_15_15?", + "D_771528780_15_15?", + "D_486574018_15_15?", + "D_278277373_15_15?", + "D_779052408_15_15?", + "D_133297530_15_15?", + "PREGSUMMARY_15_15", + "D_968816827_16_16?", + "D_391951010_16_16?", + "D_281494550_16_16?", + "D_771528780_16_16?", + "D_486574018_16_16?", + "D_278277373_16_16?", + "D_779052408_16_16?", + "D_133297530_16_16?", + "PREGSUMMARY_16_16", + "D_968816827_17_17?", + "D_391951010_17_17?", + "D_281494550_17_17?", + "D_771528780_17_17?", + "D_486574018_17_17?", + "D_278277373_17_17?", + "D_779052408_17_17?", + "D_133297530_17_17?", + "PREGSUMMARY_17_17", + "D_968816827_18_18?", + "D_391951010_18_18?", + "D_281494550_18_18?", + "D_771528780_18_18?", + "D_486574018_18_18?", + "D_278277373_18_18?", + "D_779052408_18_18?", + "D_133297530_18_18?", + "PREGSUMMARY_18_18", + "D_968816827_19_19?", + "D_391951010_19_19?", + "D_281494550_19_19?", + "D_771528780_19_19?", + "D_486574018_19_19?", + "D_278277373_19_19?", + "D_779052408_19_19?", + "D_133297530_19_19?", + "PREGSUMMARY_19_19", + "D_968816827_20_20?", + "D_391951010_20_20?", + "D_281494550_20_20?", + "D_771528780_20_20?", + "D_486574018_20_20?", + "D_278277373_20_20?", + "D_779052408_20_20?", + "D_133297530_20_20?", + "PREGSUMMARY_20_20", + "D_968816827_21_21?", + "D_391951010_21_21?", + "D_281494550_21_21?", + "D_771528780_21_21?", + "D_486574018_21_21?", + "D_278277373_21_21?", + "D_779052408_21_21?", + "D_133297530_21_21?", + "PREGSUMMARY_21_21", + "D_968816827_22_22?", + "D_391951010_22_22?", + "D_281494550_22_22?", + "D_771528780_22_22?", + "D_486574018_22_22?", + "D_278277373_22_22?", + "D_779052408_22_22?", + "D_133297530_22_22?", + "PREGSUMMARY_22_22", + "D_968816827_23_23?", + "D_391951010_23_23?", + "D_281494550_23_23?", + "D_771528780_23_23?", + "D_486574018_23_23?", + "D_278277373_23_23?", + "D_779052408_23_23?", + "D_133297530_23_23?", + "PREGSUMMARY_23_23", + "D_968816827_24_24?", + "D_391951010_24_24?", + "D_281494550_24_24?", + "D_771528780_24_24?", + "D_486574018_24_24?", + "D_278277373_24_24?", + "D_779052408_24_24?", + "D_133297530_24_24?", + "PREGSUMMARY_24_24", + "D_968816827_25_25?", + "D_391951010_25_25?", + "D_281494550_25_25?", + "D_771528780_25_25?", + "D_486574018_25_25?", + "D_278277373_25_25?", + "D_779052408_25_25?", + "D_133297530_25_25?", + "PREGSUMMARY_25_25", + "END_OF_LOOP", + "FERT1", + "D_939897560?", + "D_760801131?", + "D_424047361?", + "D_548355426?", + "D_224681201?", + "D_881200765?", + "D_139673389?", + "D_943996164?", + "D_994899398?", + "D_198719822?", + "D_628137243?", + "D_399078599?", + "D_560711355?", + "D_309710463?", + "D_167207966?", + "D_538349354?", + "D_767785846?", + "D_466346054?", + "D_111082535?", + "D_875135634?", + "HORMED", + "D_543780863?", + "D_880331901?", + "D_301052397?", + "D_734836192?", + "D_215455305?", + "D_809735528?", + "D_958009220?", + "D_946211808?", + "D_654271781?", + "D_220105997?", + "D_806253825?", + "D_819957363?", + "D_604086099?", + "D_938969985?", + "D_876683805?", + "D_118237712?", + "D_899455852?", + "D_902999015?", + "D_484006644?", + "D_190721176?", + "D_358011592?", + "D_807214881?", + "D_344573484?", + "D_708921303?", + "D_535533643?", + "D_901154649?", + "D_100937200?", + "D_452984435?", + "D_129924389?", + "D_404596261?", + "D_465017353?", + "D_370798456?", + "D_101144925?", + "D_583012139?", + "D_991330361?", + "D_184692605?", + "D_139348254?", + "MENOHOR", + "D_621744463?", + "D_668834883?", + "D_856627601?", + "D_801749224?", + "D_799382711?", + "D_623759247?", + "D_564185028?", + "D_560845692?", + "D_779165920?", + "D_745775718?", + "D_648678282?", + "D_850536692?", + "D_774992239?", + "D_695206943?", + "D_291707744?", + "D_792792066?", + "D_894363067?", + "D_984901301?", + "D_872509317?", + "D_378921620?", + "D_854078473?", + "D_268372217?", + "D_800943768?", + "D_590329439?", + "D_906459952?", + "D_747629521?", + "D_556129044?", + "D_563663099?", + "D_356969766?", + "D_453820991?", + "D_111271067?", + "D_597869478?", + "D_949663397?", + "D_263785082?", + "D_824165133?", + "D_295472931?", + "D_728437398?", + "D_578176688?", + "D_922903688?", + "D_963284259?", + "D_615905904?", + "D_946710366?", + "D_219538082?", + "D_583111732?", + "D_603209609?", + "D_824251330?", + "D_912818075?", + "D_138836502?", + "D_290126991?", + "TESTTHER_INTRO", + "D_111235606?", + "D_946849196?", + "D_797076693?", + "D_984514646?", + "D_414663452?", + "D_570187182?", + "D_557526470?", + "D_492822047?", + "D_466727144?", + "D_307736999?", + "D_305195766?", + "WORKACT", + "D_392658845", + "INTROSITTING", + "D_649352910", + "HOUSE1", + "D_733547268", + "D_128705365", + "D_204421360?", + "D_442059084?", + "D_992022740?", + "D_429531329?", + "D_829749579?", + "D_888313306?", + "D_644018981?", + "D_618482103?", + "D_352531133?", + "D_267261558?", + "D_517976064?", + "D_894610280?", + "D_267122668?", + "D_901660173?", + "D_222110888?", + "D_953510929?", + "D_422260069?", + "D_564242877?", + "D_411788467?", + "D_141251197?", + "D_635874413?", + "D_184448791?", + "D_768302347?", + "D_371748514?", + "D_944699052?", + "D_658018390?", + "D_858525957?", + "D_849399881?", + "D_406846149?", + "D_787591805?", + "D_689956879?", + "D_725713485?", + "D_900299856?", + "D_255761998?", + "D_571361258?", + "D_149884127?", + "D_167966775?", + "D_904844824?", + "D_845164425?", + "D_612068433?", + "D_650405110?", + "D_187772368?", + "D_865200503?", + "D_831643763?", + "D_815229596?", + "D_981509686?", + "D_921220809?", + "D_262305264?", + "D_214750556?", + "D_621878019?", + "D_409324592?", + "D_775324618?", + "D_305312165?", + "D_895837106?", + "D_522949496?", + "D_272119228?", + "SECTION4", + "D_591723682?", + "D_168431681?", + "INTROSLESCH1", + "INTROSLESCH1_1", + "D_636757313?", + "D_653906464?", + "D_580367946?", + "D_358259099?", + "D_392629868?", + "D_354980163?", + "D_424807655?", + "INTROSLESCH2", + "D_823919522?", + "D_532767229?", + "D_698673038?", + "D_711365027?", + "D_874262904?", + "D_820694957?", + "D_823541843?", + "D_825227968?", + "SLEEPHABITS", + "D_421859821", + "D_910856756?", + "D_981441822", + "D_471018082?", + "D_940733450?", + "D_406137786?", + "D_631303960?", + "D_876846761?", + "D_756521698?", + "D_479628567?", + "D_629010195?", + "D_674976924?", + "D_195662769?", + "D_214870856?", + "D_680730257?", + "D_392874924?", + "D_199254974?", + "END" + ], + "responseControlsByType": { + "checkbox": 244, + "number": 236, + "radio": 1105, + "text": 9, + "time": 6 + }, + "explicitTransitions": { + "targets": [ + "D_861838892", + "D_837412550", + "D_388804810", + "D_614446276", + "D_234177873", + "D_248599913", + "D_697661603", + "D_414005872", + "D_596961796", + "D_113681507", + "D_177526169", + "D_643807999", + "D_564374538", + "D_825189914", + "D_615979584", + "D_814141708", + "D_275143071", + "D_265428345", + "D_753416375", + "D_771526486", + "D_292658699", + "D_152138929", + "D_491549803", + "D_646042915", + "D_270254670", + "D_861824298", + "D_630231395", + "D_846227588", + "D_799338907", + "D_376720409", + "D_575646308", + "D_655266993", + "D_798182168", + "D_893965588", + "D_439072744", + "D_733861762", + "D_509383583", + "D_322479862", + "D_438682764", + "D_445571225", + "D_761822652", + "D_887435355", + "D_737490587", + "D_731790154", + "D_305292465", + "D_112024853", + "D_550092533", + "D_163057677", + "D_225047594", + "D_297084062", + "D_901498441", + "D_147792229", + "D_976052812", + "D_991427384", + "D_694817520", + "D_982448213", + "D_371176229", + "D_745223146", + "D_643361372", + "D_556235252", + "D_172234651", + "D_416865817", + "D_266752903", + "SECTION2", + "D_753610471", + "D_424183977", + "D_824287808", + "D_889053435", + "D_803968511", + "D_378572291", + "D_846978339", + "D_936366310", + "D_618427836", + "D_774514900", + "D_368595692", + "D_497904005", + "D_111235606", + "INTROMENSHIS2", + "D_972593606", + "D_791830593", + "D_534920374", + "D_614145455", + "PREG", + "D_263114971", + "D_405571048", + "D_996243083", + "FERT1", + "D_771528780_1_1", + "PREGSUMMARY_1_1", + "D_779052408_1_1", + "D_278277373_1_1", + "D_771528780_2_2", + "PREGSUMMARY_2_2", + "D_779052408_2_2", + "D_278277373_2_2", + "D_771528780_3_3", + "PREGSUMMARY_3_3", + "D_779052408_3_3", + "D_278277373_3_3", + "D_771528780_4_4", + "PREGSUMMARY_4_4", + "D_779052408_4_4", + "D_278277373_4_4", + "D_771528780_5_5", + "PREGSUMMARY_5_5", + "D_779052408_5_5", + "D_278277373_5_5", + "D_771528780_6_6", + "PREGSUMMARY_6_6", + "D_779052408_6_6", + "D_278277373_6_6", + "D_771528780_7_7", + "PREGSUMMARY_7_7", + "D_779052408_7_7", + "D_278277373_7_7", + "D_771528780_8_8", + "PREGSUMMARY_8_8", + "D_779052408_8_8", + "D_278277373_8_8", + "D_771528780_9_9", + "PREGSUMMARY_9_9", + "D_779052408_9_9", + "D_278277373_9_9", + "D_771528780_10_10", + "PREGSUMMARY_10_10", + "D_779052408_10_10", + "D_278277373_10_10", + "D_771528780_11_11", + "PREGSUMMARY_11_11", + "D_779052408_11_11", + "D_278277373_11_11", + "D_771528780_12_12", + "PREGSUMMARY_12_12", + "D_779052408_12_12", + "D_278277373_12_12", + "D_771528780_13_13", + "PREGSUMMARY_13_13", + "D_779052408_13_13", + "D_278277373_13_13", + "D_771528780_14_14", + "PREGSUMMARY_14_14", + "D_779052408_14_14", + "D_278277373_14_14", + "D_771528780_15_15", + "PREGSUMMARY_15_15", + "D_779052408_15_15", + "D_278277373_15_15", + "D_771528780_16_16", + "PREGSUMMARY_16_16", + "D_779052408_16_16", + "D_278277373_16_16", + "D_771528780_17_17", + "PREGSUMMARY_17_17", + "D_779052408_17_17", + "D_278277373_17_17", + "D_771528780_18_18", + "PREGSUMMARY_18_18", + "D_779052408_18_18", + "D_278277373_18_18", + "D_771528780_19_19", + "PREGSUMMARY_19_19", + "D_779052408_19_19", + "D_278277373_19_19", + "D_771528780_20_20", + "PREGSUMMARY_20_20", + "D_779052408_20_20", + "D_278277373_20_20", + "D_771528780_21_21", + "PREGSUMMARY_21_21", + "D_779052408_21_21", + "D_278277373_21_21", + "D_771528780_22_22", + "PREGSUMMARY_22_22", + "D_779052408_22_22", + "D_278277373_22_22", + "D_771528780_23_23", + "PREGSUMMARY_23_23", + "D_779052408_23_23", + "D_278277373_23_23", + "D_771528780_24_24", + "PREGSUMMARY_24_24", + "D_779052408_24_24", + "D_278277373_24_24", + "D_771528780_25_25", + "PREGSUMMARY_25_25", + "D_779052408_25_25", + "D_278277373_25_25", + "D_760801131", + "D_224681201", + "D_424047361", + "D_548355426", + "D_881200765", + "D_111082535", + "D_139673389", + "D_943996164", + "D_994899398", + "D_198719822", + "D_628137243", + "D_399078599", + "D_560711355", + "D_309710463", + "D_167207966", + "D_538349354", + "D_767785846", + "D_466346054", + "D_875135634", + "HORMED", + "D_880331901", + "D_809735528", + "D_220105997", + "D_938969985", + "D_902999015", + "D_807214881", + "D_901154649", + "D_404596261", + "D_583012139", + "MENOHOR", + "D_301052397", + "D_215455305", + "D_734836192", + "D_958009220", + "D_654271781", + "D_946211808", + "D_806253825", + "D_604086099", + "D_819957363", + "D_876683805", + "D_899455852", + "D_118237712", + "D_484006644", + "D_358011592", + "D_190721176", + "D_344573484", + "D_535533643", + "D_708921303", + "D_100937200", + "D_129924389", + "D_452984435", + "D_465017353", + "D_101144925", + "D_370798456", + "D_991330361", + "D_139348254", + "D_184692605", + "D_668834883", + "WORKACT", + "D_856627601", + "D_564185028", + "D_648678282", + "D_291707744", + "D_872509317", + "D_800943768", + "D_801749224", + "D_623759247", + "D_799382711", + "D_560845692", + "D_745775718", + "D_779165920", + "D_850536692", + "D_695206943", + "D_774992239", + "D_792792066", + "D_984901301", + "D_894363067", + "D_378921620", + "D_268372217", + "D_854078473", + "D_590329439", + "D_356969766", + "D_263785082", + "D_906459952", + "D_556129044", + "D_747629521", + "D_563663099", + "D_453820991", + "D_597869478", + "D_111271067", + "D_949663397", + "D_824165133", + "D_922903688", + "D_219538082", + "TESTTHER_INTRO", + "D_295472931", + "D_578176688", + "D_728437398", + "D_963284259", + "D_946710366", + "D_615905904", + "D_583111732", + "D_824251330", + "D_603209609", + "D_290126991", + "D_570187182", + "D_797076693", + "D_984514646", + "D_557526470", + "D_492822047", + "D_466727144", + "D_305195766", + "D_307736999", + "D_442059084", + "D_829749579", + "D_618482103", + "D_517976064", + "D_992022740", + "D_429531329", + "D_888313306", + "D_644018981", + "D_352531133", + "D_267261558", + "D_894610280", + "D_222110888", + "D_564242877", + "D_635874413", + "D_371748514", + "D_858525957", + "D_787591805", + "D_900299856", + "D_149884127", + "D_845164425", + "D_187772368", + "D_815229596", + "D_262305264", + "D_409324592", + "D_895837106", + "SECTION4", + "D_267122668", + "D_901660173", + "D_953510929", + "D_422260069", + "D_411788467", + "D_141251197", + "D_184448791", + "D_768302347", + "D_944699052", + "D_658018390", + "D_849399881", + "D_406846149", + "D_689956879", + "D_725713485", + "D_255761998", + "D_571361258", + "D_167966775", + "D_904844824", + "D_612068433", + "D_650405110", + "D_865200503", + "D_831643763", + "D_981509686", + "D_921220809", + "D_214750556", + "D_621878019", + "D_775324618", + "D_305312165", + "D_522949496", + "D_272119228", + "D_168431681", + "INTROSLESCH1", + "D_636757313", + "D_354980163", + "D_424807655", + "D_820694957", + "D_823541843", + "D_406137786", + "D_479628567", + "D_631303960", + "D_876846761", + "D_756521698", + "D_629010195", + "D_674976924", + "D_195662769", + "END" + ], + "byKind": { + "default": 143, + "no-response": 107, + "response": 342 + }, + "byResolution": { + "exact": 589, + "terminal": 3 + }, + "triggerTypes": { + "checkbox": 65, + "hidden": 250, + "radio": 277 + }, + "triggerValues": [ + "469512398", + "194424439", + "422188606", + "555555502", + "800410166", + "221645137", + "974248369", + "317567178", + "484055234", + "802197176", + "480724806", + "819373917", + "353358909", + "104430631", + "933374659", + "920460744", + "449861632", + "648960871", + "868025301", + "939110313", + "410083265", + "718537646", + "801142243", + "178420302", + "549031911", + "858427002", + "471375042", + "386152189", + "650420270", + "113064256", + "548167685", + "859025516", + "582425113", + "330745988", + "909774794", + "868504994", + "655309065", + "757609794", + "585076356", + "807835037", + "223216393", + "306890578", + "858244199", + "746038746", + "619799524", + "663814928", + "642004888", + "454641975", + "256131117", + "532607252", + "459188493", + "304927036", + "100181644", + "372219003", + "743731422", + "441493408", + "612012325", + "100752105", + "207913198", + "863920008", + "787142499", + "205223932", + "817131019", + "181769837", + "246843973", + "854184254", + "515434780", + "674148137", + "687050279", + "837393880", + "944874693", + "535003378", + "797221287", + "500744195", + "383015037", + "904954920", + "619501806", + "203192394", + "261267696", + "926584500", + "420058896", + "868685663", + "760484278", + "345916806", + "936042582", + "182827107", + "734860227", + "371531887", + "423631576", + "370923702", + "958538953", + "274062548" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "or(equals(D_407056417,536341288),or(equals(D_750420077,578416151),equals(D_750420077,434651539)))", + "valueIsOneOf(\"D_750420077\",578416151,434651539) or valueEquals(\"D_407056417\",536341288)", + "equals(D_643361372,933374659)", + "equals(D_643361372,920460744)", + "equals(D_643361372,449861632)", + "not (equals(\"D_407056417\",536341288) or valueIsOneOf(\"D_750420077\",578416151,434651539))", + "equals(\"D_407056417\",536341288) or valueIsOneOf(\"D_750420077\",578416151,434651539)", + "doesNotEqual(D_496539718,648960871)", + "greaterThanOrEqual(D_405571048,1)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,1)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,1)))", + "equals(D_391951010_1_1,628445697)", + "equals(D_391951010_1_1,419220239)", + "or(equals(D_391951010_1_1,223216393),equals(D_391951010_1_1,628445697))", + "equals(D_391951010_1_1,223216393)", + "equals(D_391951010_1_1,306890578)", + "equals(D_391951010_1_1,858244199)", + "equals(D_391951010_1_1,746038746)", + "valueIsOneOf('D_391951010_1_1',628445697,419220239)", + "equals(D_281494550_1_1,582602017)", + "equals(D_281494550_1_1,105727261)", + "equals(D_281494550_1_1,720288326)", + "valueIsOneOf('D_391951010_1_1',223216393,628445697,419220239)", + "equals(D_771528780_1_1,660308254)", + "equals(D_771528780_1_1,936573532)", + "equals(D_486574018_1_1,353358909)", + "equals(D_486574018_1_1,104430631)", + "valueIsOneOf('D_391951010_1_1',223216393,628445697,419220239,858244199)", + "equals(D_779052408_1_1,353358909)", + "equals(D_779052408_1_1,104430631)", + "equals(D_133297530_1_1,353358909)", + "equals(D_133297530_1_1,104430631)", + "greaterThanOrEqual(D_405571048,2)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,2)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,2)))", + "equals(D_391951010_2_2,628445697)", + "equals(D_391951010_2_2,419220239)", + "or(equals(D_391951010_2_2,223216393),equals(D_391951010_2_2,628445697))", + "equals(D_391951010_2_2,223216393)", + "equals(D_391951010_2_2,306890578)", + "equals(D_391951010_2_2,858244199)", + "equals(D_391951010_2_2,746038746)", + "valueIsOneOf('D_391951010_2_2',628445697,419220239)", + "equals(D_281494550_2_2,582602017)", + "equals(D_281494550_2_2,105727261)", + "equals(D_281494550_2_2,720288326)", + "valueIsOneOf('D_391951010_2_2',223216393,628445697,419220239)", + "equals(D_771528780_2_2,660308254)", + "equals(D_771528780_2_2,936573532)", + "equals(D_486574018_2_2,353358909)", + "equals(D_486574018_2_2,104430631)", + "valueIsOneOf('D_391951010_2_2',223216393,628445697,419220239,858244199)", + "equals(D_779052408_2_2,353358909)", + "equals(D_779052408_2_2,104430631)", + "equals(D_133297530_2_2,353358909)", + "equals(D_133297530_2_2,104430631)", + "greaterThanOrEqual(D_405571048,3)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,3)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,3)))", + "equals(D_391951010_3_3,628445697)", + "equals(D_391951010_3_3,419220239)", + "or(equals(D_391951010_3_3,223216393),equals(D_391951010_3_3,628445697))", + "equals(D_391951010_3_3,223216393)", + "equals(D_391951010_3_3,306890578)", + "equals(D_391951010_3_3,858244199)", + "equals(D_391951010_3_3,746038746)", + "valueIsOneOf('D_391951010_3_3',628445697,419220239)", + "equals(D_281494550_3_3,582602017)", + "equals(D_281494550_3_3,105727261)", + "equals(D_281494550_3_3,720288326)", + "valueIsOneOf('D_391951010_3_3',223216393,628445697,419220239)", + "equals(D_771528780_3_3,660308254)", + "equals(D_771528780_3_3,936573532)", + "equals(D_486574018_3_3,353358909)", + "equals(D_486574018_3_3,104430631)", + "valueIsOneOf('D_391951010_3_3',223216393,628445697,419220239,858244199)", + "equals(D_779052408_3_3,353358909)", + "equals(D_779052408_3_3,104430631)", + "equals(D_133297530_3_3,353358909)", + "equals(D_133297530_3_3,104430631)", + "greaterThanOrEqual(D_405571048,4)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,4)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,4)))", + "equals(D_391951010_4_4,628445697)", + "equals(D_391951010_4_4,419220239)", + "or(equals(D_391951010_4_4,223216393),equals(D_391951010_4_4,628445697))", + "equals(D_391951010_4_4,223216393)", + "equals(D_391951010_4_4,306890578)", + "equals(D_391951010_4_4,858244199)", + "equals(D_391951010_4_4,746038746)", + "valueIsOneOf('D_391951010_4_4',628445697,419220239)", + "equals(D_281494550_4_4,582602017)", + "equals(D_281494550_4_4,105727261)", + "equals(D_281494550_4_4,720288326)", + "valueIsOneOf('D_391951010_4_4',223216393,628445697,419220239)", + "equals(D_771528780_4_4,660308254)", + "equals(D_771528780_4_4,936573532)", + "equals(D_486574018_4_4,353358909)", + "equals(D_486574018_4_4,104430631)", + "valueIsOneOf('D_391951010_4_4',223216393,628445697,419220239,858244199)", + "equals(D_779052408_4_4,353358909)", + "equals(D_779052408_4_4,104430631)", + "equals(D_133297530_4_4,353358909)", + "equals(D_133297530_4_4,104430631)", + "greaterThanOrEqual(D_405571048,5)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,5)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,5)))", + "equals(D_391951010_5_5,628445697)", + "equals(D_391951010_5_5,419220239)", + "or(equals(D_391951010_5_5,223216393),equals(D_391951010_5_5,628445697))", + "equals(D_391951010_5_5,223216393)", + "equals(D_391951010_5_5,306890578)", + "equals(D_391951010_5_5,858244199)", + "equals(D_391951010_5_5,746038746)", + "valueIsOneOf('D_391951010_5_5',628445697,419220239)", + "equals(D_281494550_5_5,582602017)", + "equals(D_281494550_5_5,105727261)", + "equals(D_281494550_5_5,720288326)", + "valueIsOneOf('D_391951010_5_5',223216393,628445697,419220239)", + "equals(D_771528780_5_5,660308254)", + "equals(D_771528780_5_5,936573532)", + "equals(D_486574018_5_5,353358909)", + "equals(D_486574018_5_5,104430631)", + "valueIsOneOf('D_391951010_5_5',223216393,628445697,419220239,858244199)", + "equals(D_779052408_5_5,353358909)", + "equals(D_779052408_5_5,104430631)", + "equals(D_133297530_5_5,353358909)", + "equals(D_133297530_5_5,104430631)", + "greaterThanOrEqual(D_405571048,6)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,6)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,6)))", + "equals(D_391951010_6_6,628445697)", + "equals(D_391951010_6_6,419220239)", + "or(equals(D_391951010_6_6,223216393),equals(D_391951010_6_6,628445697))", + "equals(D_391951010_6_6,223216393)", + "equals(D_391951010_6_6,306890578)", + "equals(D_391951010_6_6,858244199)", + "equals(D_391951010_6_6,746038746)", + "valueIsOneOf('D_391951010_6_6',628445697,419220239)", + "equals(D_281494550_6_6,582602017)", + "equals(D_281494550_6_6,105727261)", + "equals(D_281494550_6_6,720288326)", + "valueIsOneOf('D_391951010_6_6',223216393,628445697,419220239)", + "equals(D_771528780_6_6,660308254)", + "equals(D_771528780_6_6,936573532)", + "equals(D_486574018_6_6,353358909)", + "equals(D_486574018_6_6,104430631)", + "valueIsOneOf('D_391951010_6_6',223216393,628445697,419220239,858244199)", + "equals(D_779052408_6_6,353358909)", + "equals(D_779052408_6_6,104430631)", + "equals(D_133297530_6_6,353358909)", + "equals(D_133297530_6_6,104430631)", + "greaterThanOrEqual(D_405571048,7)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,7)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,7)))", + "equals(D_391951010_7_7,628445697)", + "equals(D_391951010_7_7,419220239)", + "or(equals(D_391951010_7_7,223216393),equals(D_391951010_7_7,628445697))", + "equals(D_391951010_7_7,223216393)", + "equals(D_391951010_7_7,306890578)", + "equals(D_391951010_7_7,858244199)", + "equals(D_391951010_7_7,746038746)", + "valueIsOneOf('D_391951010_7_7',628445697,419220239)", + "equals(D_281494550_7_7,582602017)", + "equals(D_281494550_7_7,105727261)", + "equals(D_281494550_7_7,720288326)", + "valueIsOneOf('D_391951010_7_7',223216393,628445697,419220239)", + "equals(D_771528780_7_7,660308254)", + "equals(D_771528780_7_7,936573532)", + "equals(D_486574018_7_7,353358909)", + "equals(D_486574018_7_7,104430631)", + "valueIsOneOf('D_391951010_7_7',223216393,628445697,419220239,858244199)", + "equals(D_779052408_7_7,353358909)", + "equals(D_779052408_7_7,104430631)", + "equals(D_133297530_7_7,353358909)", + "equals(D_133297530_7_7,104430631)", + "greaterThanOrEqual(D_405571048,8)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,8)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,8)))", + "equals(D_391951010_8_8,628445697)", + "equals(D_391951010_8_8,419220239)", + "or(equals(D_391951010_8_8,223216393),equals(D_391951010_8_8,628445697))", + "equals(D_391951010_8_8,223216393)", + "equals(D_391951010_8_8,306890578)", + "equals(D_391951010_8_8,858244199)", + "equals(D_391951010_8_8,746038746)", + "valueIsOneOf('D_391951010_8_8',628445697,419220239)", + "equals(D_281494550_8_8,582602017)", + "equals(D_281494550_8_8,105727261)", + "equals(D_281494550_8_8,720288326)", + "valueIsOneOf('D_391951010_8_8',223216393,628445697,419220239)", + "equals(D_771528780_8_8,660308254)", + "equals(D_771528780_8_8,936573532)", + "equals(D_486574018_8_8,353358909)", + "equals(D_486574018_8_8,104430631)", + "valueIsOneOf('D_391951010_8_8',223216393,628445697,419220239,858244199)", + "equals(D_779052408_8_8,353358909)", + "equals(D_779052408_8_8,104430631)", + "equals(D_133297530_8_8,353358909)", + "equals(D_133297530_8_8,104430631)", + "greaterThanOrEqual(D_405571048,9)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,9)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,9)))", + "equals(D_391951010_9_9,628445697)", + "equals(D_391951010_9_9,419220239)", + "or(equals(D_391951010_9_9,223216393),equals(D_391951010_9_9,628445697))", + "equals(D_391951010_9_9,223216393)", + "equals(D_391951010_9_9,306890578)", + "equals(D_391951010_9_9,858244199)", + "equals(D_391951010_9_9,746038746)", + "valueIsOneOf('D_391951010_9_9',628445697,419220239)", + "equals(D_281494550_9_9,582602017)", + "equals(D_281494550_9_9,105727261)", + "equals(D_281494550_9_9,720288326)", + "valueIsOneOf('D_391951010_9_9',223216393,628445697,419220239)", + "equals(D_771528780_9_9,660308254)", + "equals(D_771528780_9_9,936573532)", + "equals(D_486574018_9_9,353358909)", + "equals(D_486574018_9_9,104430631)", + "valueIsOneOf('D_391951010_9_9',223216393,628445697,419220239,858244199)", + "equals(D_779052408_9_9,353358909)", + "equals(D_779052408_9_9,104430631)", + "equals(D_133297530_9_9,353358909)", + "equals(D_133297530_9_9,104430631)", + "greaterThanOrEqual(D_405571048,10)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,10)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,10)))", + "equals(D_391951010_10_10,628445697)", + "equals(D_391951010_10_10,419220239)", + "or(equals(D_391951010_10_10,223216393),equals(D_391951010_10_10,628445697))", + "equals(D_391951010_10_10,223216393)", + "equals(D_391951010_10_10,306890578)", + "equals(D_391951010_10_10,858244199)", + "equals(D_391951010_10_10,746038746)", + "valueIsOneOf('D_391951010_10_10',628445697,419220239)", + "equals(D_281494550_10_10,582602017)", + "equals(D_281494550_10_10,105727261)", + "equals(D_281494550_10_10,720288326)", + "valueIsOneOf('D_391951010_10_10',223216393,628445697,419220239)", + "equals(D_771528780_10_10,660308254)", + "equals(D_771528780_10_10,936573532)", + "equals(D_486574018_10_10,353358909)", + "equals(D_486574018_10_10,104430631)", + "valueIsOneOf('D_391951010_10_10',223216393,628445697,419220239,858244199)", + "equals(D_779052408_10_10,353358909)", + "equals(D_779052408_10_10,104430631)", + "equals(D_133297530_10_10,353358909)", + "equals(D_133297530_10_10,104430631)", + "greaterThanOrEqual(D_405571048,11)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,11)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,11)))", + "equals(D_391951010_11_11,628445697)", + "equals(D_391951010_11_11,419220239)", + "or(equals(D_391951010_11_11,223216393),equals(D_391951010_11_11,628445697))", + "equals(D_391951010_11_11,223216393)", + "equals(D_391951010_11_11,306890578)", + "equals(D_391951010_11_11,858244199)", + "equals(D_391951010_11_11,746038746)", + "valueIsOneOf('D_391951010_11_11',628445697,419220239)", + "equals(D_281494550_11_11,582602017)", + "equals(D_281494550_11_11,105727261)", + "equals(D_281494550_11_11,720288326)", + "valueIsOneOf('D_391951010_11_11',223216393,628445697,419220239)", + "equals(D_771528780_11_11,660308254)", + "equals(D_771528780_11_11,936573532)", + "equals(D_486574018_11_11,353358909)", + "equals(D_486574018_11_11,104430631)", + "valueIsOneOf('D_391951010_11_11',223216393,628445697,419220239,858244199)", + "equals(D_779052408_11_11,353358909)", + "equals(D_779052408_11_11,104430631)", + "equals(D_133297530_11_11,353358909)", + "equals(D_133297530_11_11,104430631)", + "greaterThanOrEqual(D_405571048,12)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,12)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,12)))", + "equals(D_391951010_12_12,628445697)", + "equals(D_391951010_12_12,419220239)", + "or(equals(D_391951010_12_12,223216393),equals(D_391951010_12_12,628445697))", + "equals(D_391951010_12_12,223216393)", + "equals(D_391951010_12_12,306890578)", + "equals(D_391951010_12_12,858244199)", + "equals(D_391951010_12_12,746038746)", + "valueIsOneOf('D_391951010_12_12',628445697,419220239)", + "equals(D_281494550_12_12,582602017)", + "equals(D_281494550_12_12,105727261)", + "equals(D_281494550_12_12,720288326)", + "valueIsOneOf('D_391951010_12_12',223216393,628445697,419220239)", + "equals(D_771528780_12_12,660308254)", + "equals(D_771528780_12_12,936573532)", + "equals(D_486574018_12_12,353358909)", + "equals(D_486574018_12_12,104430631)", + "valueIsOneOf('D_391951010_12_12',223216393,628445697,419220239,858244199)", + "equals(D_779052408_12_12,353358909)", + "equals(D_779052408_12_12,104430631)", + "equals(D_133297530_12_12,353358909)", + "equals(D_133297530_12_12,104430631)", + "greaterThanOrEqual(D_405571048,13)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,13)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,13)))", + "equals(D_391951010_13_13,628445697)", + "equals(D_391951010_13_13,419220239)", + "or(equals(D_391951010_13_13,223216393),equals(D_391951010_13_13,628445697))", + "equals(D_391951010_13_13,223216393)", + "equals(D_391951010_13_13,306890578)", + "equals(D_391951010_13_13,858244199)", + "equals(D_391951010_13_13,746038746)", + "valueIsOneOf('D_391951010_13_13',628445697,419220239)", + "equals(D_281494550_13_13,582602017)", + "equals(D_281494550_13_13,105727261)", + "equals(D_281494550_13_13,720288326)", + "valueIsOneOf('D_391951010_13_13',223216393,628445697,419220239)", + "equals(D_771528780_13_13,660308254)", + "equals(D_771528780_13_13,936573532)", + "equals(D_486574018_13_13,353358909)", + "equals(D_486574018_13_13,104430631)", + "valueIsOneOf('D_391951010_13_13',223216393,628445697,419220239,858244199)", + "equals(D_779052408_13_13,353358909)", + "equals(D_779052408_13_13,104430631)", + "equals(D_133297530_13_13,353358909)", + "equals(D_133297530_13_13,104430631)", + "greaterThanOrEqual(D_405571048,14)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,14)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,14)))", + "equals(D_391951010_14_14,628445697)", + "equals(D_391951010_14_14,419220239)", + "or(equals(D_391951010_14_14,223216393),equals(D_391951010_14_14,628445697))", + "equals(D_391951010_14_14,223216393)", + "equals(D_391951010_14_14,306890578)", + "equals(D_391951010_14_14,858244199)", + "equals(D_391951010_14_14,746038746)", + "valueIsOneOf('D_391951010_14_14',628445697,419220239)", + "equals(D_281494550_14_14,582602017)", + "equals(D_281494550_14_14,105727261)", + "equals(D_281494550_14_14,720288326)", + "valueIsOneOf('D_391951010_14_14',223216393,628445697,419220239)", + "equals(D_771528780_14_14,660308254)", + "equals(D_771528780_14_14,936573532)", + "equals(D_486574018_14_14,353358909)", + "equals(D_486574018_14_14,104430631)", + "valueIsOneOf('D_391951010_14_14',223216393,628445697,419220239,858244199)", + "equals(D_779052408_14_14,353358909)", + "equals(D_779052408_14_14,104430631)", + "equals(D_133297530_14_14,353358909)", + "equals(D_133297530_14_14,104430631)", + "greaterThanOrEqual(D_405571048,15)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,15)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,15)))", + "equals(D_391951010_15_15,628445697)", + "equals(D_391951010_15_15,419220239)", + "or(equals(D_391951010_15_15,223216393),equals(D_391951010_15_15,628445697))", + "equals(D_391951010_15_15,223216393)", + "equals(D_391951010_15_15,306890578)", + "equals(D_391951010_15_15,858244199)", + "equals(D_391951010_15_15,746038746)", + "valueIsOneOf('D_391951010_15_15',628445697,419220239)", + "equals(D_281494550_15_15,582602017)", + "equals(D_281494550_15_15,105727261)", + "equals(D_281494550_15_15,720288326)", + "valueIsOneOf('D_391951010_15_15',223216393,628445697,419220239)", + "equals(D_771528780_15_15,660308254)", + "equals(D_771528780_15_15,936573532)", + "equals(D_486574018_15_15,353358909)", + "equals(D_486574018_15_15,104430631)", + "valueIsOneOf('D_391951010_15_15',223216393,628445697,419220239,858244199)", + "equals(D_779052408_15_15,353358909)", + "equals(D_779052408_15_15,104430631)", + "equals(D_133297530_15_15,353358909)", + "equals(D_133297530_15_15,104430631)", + "greaterThanOrEqual(D_405571048,16)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,16)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,16)))", + "equals(D_391951010_16_16,628445697)", + "equals(D_391951010_16_16,419220239)", + "or(equals(D_391951010_16_16,223216393),equals(D_391951010_16_16,628445697))", + "equals(D_391951010_16_16,223216393)", + "equals(D_391951010_16_16,306890578)", + "equals(D_391951010_16_16,858244199)", + "equals(D_391951010_16_16,746038746)", + "valueIsOneOf('D_391951010_16_16',628445697,419220239)", + "equals(D_281494550_16_16,582602017)", + "equals(D_281494550_16_16,105727261)", + "equals(D_281494550_16_16,720288326)", + "valueIsOneOf('D_391951010_16_16',223216393,628445697,419220239)", + "equals(D_771528780_16_16,660308254)", + "equals(D_771528780_16_16,936573532)", + "equals(D_486574018_16_16,353358909)", + "equals(D_486574018_16_16,104430631)", + "valueIsOneOf('D_391951010_16_16',223216393,628445697,419220239,858244199)", + "equals(D_779052408_16_16,353358909)", + "equals(D_779052408_16_16,104430631)", + "equals(D_133297530_16_16,353358909)", + "equals(D_133297530_16_16,104430631)", + "greaterThanOrEqual(D_405571048,17)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,17)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,17)))", + "equals(D_391951010_17_17,628445697)", + "equals(D_391951010_17_17,419220239)", + "or(equals(D_391951010_17_17,223216393),equals(D_391951010_17_17,628445697))", + "equals(D_391951010_17_17,223216393)", + "equals(D_391951010_17_17,306890578)", + "equals(D_391951010_17_17,858244199)", + "equals(D_391951010_17_17,746038746)", + "valueIsOneOf('D_391951010_17_17',628445697,419220239)", + "equals(D_281494550_17_17,582602017)", + "equals(D_281494550_17_17,105727261)", + "equals(D_281494550_17_17,720288326)", + "valueIsOneOf('D_391951010_17_17',223216393,628445697,419220239)", + "equals(D_771528780_17_17,660308254)", + "equals(D_771528780_17_17,936573532)", + "equals(D_486574018_17_17,353358909)", + "equals(D_486574018_17_17,104430631)", + "valueIsOneOf('D_391951010_17_17',223216393,628445697,419220239,858244199)", + "equals(D_779052408_17_17,353358909)", + "equals(D_779052408_17_17,104430631)", + "equals(D_133297530_17_17,353358909)", + "equals(D_133297530_17_17,104430631)", + "greaterThanOrEqual(D_405571048,18)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,18)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,18)))", + "equals(D_391951010_18_18,628445697)", + "equals(D_391951010_18_18,419220239)", + "or(equals(D_391951010_18_18,223216393),equals(D_391951010_18_18,628445697))", + "equals(D_391951010_18_18,223216393)", + "equals(D_391951010_18_18,306890578)", + "equals(D_391951010_18_18,858244199)", + "equals(D_391951010_18_18,746038746)", + "valueIsOneOf('D_391951010_18_18',628445697,419220239)", + "equals(D_281494550_18_18,582602017)", + "equals(D_281494550_18_18,105727261)", + "equals(D_281494550_18_18,720288326)", + "valueIsOneOf('D_391951010_18_18',223216393,628445697,419220239)", + "equals(D_771528780_18_18,660308254)", + "equals(D_771528780_18_18,936573532)", + "equals(D_486574018_18_18,353358909)", + "equals(D_486574018_18_18,104430631)", + "valueIsOneOf('D_391951010_18_18',223216393,628445697,419220239,858244199)", + "equals(D_779052408_18_18,353358909)", + "equals(D_779052408_18_18,104430631)", + "equals(D_133297530_18_18,353358909)", + "equals(D_133297530_18_18,104430631)", + "greaterThanOrEqual(D_405571048,19)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,19)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,19)))", + "equals(D_391951010_19_19,628445697)", + "equals(D_391951010_19_19,419220239)", + "or(equals(D_391951010_19_19,223216393),equals(D_391951010_19_19,628445697))", + "equals(D_391951010_19_19,223216393)", + "equals(D_391951010_19_19,306890578)", + "equals(D_391951010_19_19,858244199)", + "equals(D_391951010_19_19,746038746)", + "valueIsOneOf('D_391951010_19_19',628445697,419220239)", + "equals(D_281494550_19_19,582602017)", + "equals(D_281494550_19_19,105727261)", + "equals(D_281494550_19_19,720288326)", + "valueIsOneOf('D_391951010_19_19',223216393,628445697,419220239)", + "equals(D_771528780_19_19,660308254)", + "equals(D_771528780_19_19,936573532)", + "equals(D_486574018_19_19,353358909)", + "equals(D_486574018_19_19,104430631)", + "valueIsOneOf('D_391951010_19_19',223216393,628445697,419220239,858244199)", + "equals(D_779052408_19_19,353358909)", + "equals(D_779052408_19_19,104430631)", + "equals(D_133297530_19_19,353358909)", + "equals(D_133297530_19_19,104430631)", + "greaterThanOrEqual(D_405571048,20)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,20)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,20)))", + "equals(D_391951010_20_20,628445697)", + "equals(D_391951010_20_20,419220239)", + "or(equals(D_391951010_20_20,223216393),equals(D_391951010_20_20,628445697))", + "equals(D_391951010_20_20,223216393)", + "equals(D_391951010_20_20,306890578)", + "equals(D_391951010_20_20,858244199)", + "equals(D_391951010_20_20,746038746)", + "valueIsOneOf('D_391951010_20_20',628445697,419220239)", + "equals(D_281494550_20_20,582602017)", + "equals(D_281494550_20_20,105727261)", + "equals(D_281494550_20_20,720288326)", + "valueIsOneOf('D_391951010_20_20',223216393,628445697,419220239)", + "equals(D_771528780_20_20,660308254)", + "equals(D_771528780_20_20,936573532)", + "equals(D_486574018_20_20,353358909)", + "equals(D_486574018_20_20,104430631)", + "valueIsOneOf('D_391951010_20_20',223216393,628445697,419220239,858244199)", + "equals(D_779052408_20_20,353358909)", + "equals(D_779052408_20_20,104430631)", + "equals(D_133297530_20_20,353358909)", + "equals(D_133297530_20_20,104430631)", + "greaterThanOrEqual(D_405571048,21)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,21)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,21)))", + "equals(D_391951010_21_21,628445697)", + "equals(D_391951010_21_21,419220239)", + "or(equals(D_391951010_21_21,223216393),equals(D_391951010_21_21,628445697))", + "equals(D_391951010_21_21,223216393)", + "equals(D_391951010_21_21,306890578)", + "equals(D_391951010_21_21,858244199)", + "equals(D_391951010_21_21,746038746)", + "valueIsOneOf('D_391951010_21_21',628445697,419220239)", + "equals(D_281494550_21_21,582602017)", + "equals(D_281494550_21_21,105727261)", + "equals(D_281494550_21_21,720288326)", + "valueIsOneOf('D_391951010_21_21',223216393,628445697,419220239)", + "equals(D_771528780_21_21,660308254)", + "equals(D_771528780_21_21,936573532)", + "equals(D_486574018_21_21,353358909)", + "equals(D_486574018_21_21,104430631)", + "valueIsOneOf('D_391951010_21_21',223216393,628445697,419220239,858244199)", + "equals(D_779052408_21_21,353358909)", + "equals(D_779052408_21_21,104430631)", + "equals(D_133297530_21_21,353358909)", + "equals(D_133297530_21_21,104430631)", + "greaterThanOrEqual(D_405571048,22)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,22)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,22)))", + "equals(D_391951010_22_22,628445697)", + "equals(D_391951010_22_22,419220239)", + "or(equals(D_391951010_22_22,223216393),equals(D_391951010_22_22,628445697))", + "equals(D_391951010_22_22,223216393)", + "equals(D_391951010_22_22,306890578)", + "equals(D_391951010_22_22,858244199)", + "equals(D_391951010_22_22,746038746)", + "valueIsOneOf('D_391951010_22_22',628445697,419220239)", + "equals(D_281494550_22_22,582602017)", + "equals(D_281494550_22_22,105727261)", + "equals(D_281494550_22_22,720288326)", + "valueIsOneOf('D_391951010_22_22',223216393,628445697,419220239)", + "equals(D_771528780_22_22,660308254)", + "equals(D_771528780_22_22,936573532)", + "equals(D_486574018_22_22,353358909)", + "equals(D_486574018_22_22,104430631)", + "valueIsOneOf('D_391951010_22_22',223216393,628445697,419220239,858244199)", + "equals(D_779052408_22_22,353358909)", + "equals(D_779052408_22_22,104430631)", + "equals(D_133297530_22_22,353358909)", + "equals(D_133297530_22_22,104430631)", + "greaterThanOrEqual(D_405571048,23)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,23)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,23)))", + "equals(D_391951010_23_23,628445697)", + "equals(D_391951010_23_23,419220239)", + "or(equals(D_391951010_23_23,223216393),equals(D_391951010_23_23,628445697))", + "equals(D_391951010_23_23,223216393)", + "equals(D_391951010_23_23,306890578)", + "equals(D_391951010_23_23,858244199)", + "equals(D_391951010_23_23,746038746)", + "valueIsOneOf('D_391951010_23_23',628445697,419220239)", + "equals(D_281494550_23_23,582602017)", + "equals(D_281494550_23_23,105727261)", + "equals(D_281494550_23_23,720288326)", + "valueIsOneOf('D_391951010_23_23',223216393,628445697,419220239)", + "equals(D_771528780_23_23,660308254)", + "equals(D_771528780_23_23,936573532)", + "equals(D_486574018_23_23,353358909)", + "equals(D_486574018_23_23,104430631)", + "valueIsOneOf('D_391951010_23_23',223216393,628445697,419220239,858244199)", + "equals(D_779052408_23_23,353358909)", + "equals(D_779052408_23_23,104430631)", + "equals(D_133297530_23_23,353358909)", + "equals(D_133297530_23_23,104430631)", + "greaterThanOrEqual(D_405571048,24)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,24)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,24)))", + "equals(D_391951010_24_24,628445697)", + "equals(D_391951010_24_24,419220239)", + "or(equals(D_391951010_24_24,223216393),equals(D_391951010_24_24,628445697))", + "equals(D_391951010_24_24,223216393)", + "equals(D_391951010_24_24,306890578)", + "equals(D_391951010_24_24,858244199)", + "equals(D_391951010_24_24,746038746)", + "valueIsOneOf('D_391951010_24_24',628445697,419220239)", + "equals(D_281494550_24_24,582602017)", + "equals(D_281494550_24_24,105727261)", + "equals(D_281494550_24_24,720288326)", + "valueIsOneOf('D_391951010_24_24',223216393,628445697,419220239)", + "equals(D_771528780_24_24,660308254)", + "equals(D_771528780_24_24,936573532)", + "equals(D_486574018_24_24,353358909)", + "equals(D_486574018_24_24,104430631)", + "valueIsOneOf('D_391951010_24_24',223216393,628445697,419220239,858244199)", + "equals(D_779052408_24_24,353358909)", + "equals(D_779052408_24_24,104430631)", + "equals(D_133297530_24_24,353358909)", + "equals(D_133297530_24_24,104430631)", + "greaterThanOrEqual(D_405571048,25)", + "or(and(equals(D_849945160,353358909),greaterThan(D_405571048,25)),and(doesNotEqual(D_849945160,353358909),greaterThanOrEqual(D_405571048,25)))", + "equals(D_391951010_25_25,628445697)", + "equals(D_391951010_25_25,419220239)", + "or(equals(D_391951010_25_25,223216393),equals(D_391951010_25_25,628445697))", + "equals(D_391951010_25_25,223216393)", + "equals(D_391951010_25_25,306890578)", + "equals(D_391951010_25_25,858244199)", + "equals(D_391951010_25_25,746038746)", + "valueIsOneOf('D_391951010_25_25',628445697,419220239)", + "equals(D_281494550_25_25,582602017)", + "equals(D_281494550_25_25,105727261)", + "equals(D_281494550_25_25,720288326)", + "valueIsOneOf('D_391951010_25_25',223216393,628445697,419220239)", + "equals(D_771528780_25_25,660308254)", + "equals(D_771528780_25_25,936573532)", + "equals(D_486574018_25_25,353358909)", + "equals(D_486574018_25_25,104430631)", + "valueIsOneOf('D_391951010_25_25',223216393,628445697,419220239,858244199)", + "equals(D_779052408_25_25,353358909)", + "equals(D_779052408_25_25,104430631)", + "equals(D_133297530_25_25,353358909)", + "equals(D_133297530_25_25,104430631)", + "doesNotEqual(D_762700622,'')", + "doesNotExist('D_762700622')", + "equals(D_668834883,246843973)", + "equals(D_668834883,854184254)", + "equals(D_668834883,515434780)", + "equals(D_668834883,674148137)", + "valueIsOneOf(\"D_668834883\",807835037) or valueLength(\"D_640559281\")>0", + "valueLength('D_640559281')>0", + "valueLength('D_640559281')==0", + "equals(D_800943768,687050279)", + "valueIsOneOf(\"D_800943768\",807835037) or valueLength(\"D_235516216\")>0", + "valueLength('D_235516216')>0", + "valueLength('D_235516216')==0", + "equals(D_263785082,837393880)", + "equals(D_263785082,944874693)", + "valueIsOneOf(\"D_263785082\",807835037) or valueLength(\"D_542108835\")>0", + "valueLength('D_542108835')>0", + "valueLength('D_542108835')==0", + "or(equals(D_946849196,729863969),or(equals(D_946849196,108104748),or(equals(D_946849196,717308596),or(equals(D_946849196,746788766),or(equals(D_946849196,158214723),doesNotEqual(D_946849196,658810736))))))", + "doesNotEqual(D_557526470,'')", + "doesNotExist('D_557526470')", + "equals(D_613744428,353358909)", + "valueEquals(\"D_613744428\",353358909)", + "equals(\"D_613744428\",353358909)", + "someSelected(\"D_980120253_1\",\"D_980120253_2\",\"D_980120253_3\",\"D_980120253_4\",\"D_980120253_5\",\"D_980120253_6\",\"D_993029890_1\",\"D_993029890_2\",\"D_993029890_3\",\"D_993029890_4\",\"D_993029890_5\",\"D_993029890_6\",\"D_980196073_1\",\"D_980196073_2\",\"D_980196073_3\",\"D_980196073_4\",\"D_980196073_5\",\"D_980196073_6\",\"D_115422925_1\",\"D_115422925_2\",\"D_115422925_3\",\"D_115422925_4\",\"D_115422925_5\",\"D_115422925_6\",\"D_151161693_1\",\"D_151161693_2\",\"D_151161693_3\",\"D_151161693_4\",\"D_151161693_5\",\"D_151161693_6\")", + "someSelected(%22D_980120253_1%22%2C%22D_980120253_2%22%2C%22D_980120253_3%22%2C%22D_980120253_4%22%2C%22D_980120253_5%22%2C%22D_980120253_6%22)", + "someSelected(%22D_993029890_1%22%2C%22D_993029890_2%22%2C%22D_993029890_3%22%2C%22D_993029890_4%22%2C%22D_993029890_5%22%2C%22D_993029890_6%22)", + "someSelected(%22D_980196073_1%22%2C%22D_980196073_2%22%2C%22D_980196073_3%22%2C%22D_980196073_4%22%2C%22D_980196073_5%22%2C%22D_980196073_6%22)", + "someSelected(%22D_115422925_1%22%2C%22D_115422925_2%22%2C%22D_115422925_3%22%2C%22D_115422925_4%22%2C%22D_115422925_5%22%2C%22D_115422925_6%22)", + "someSelected(%22D_151161693_1%22%2C%22D_151161693_2%22%2C%22D_151161693_3%22%2C%22D_151161693_4%22%2C%22D_151161693_5%22%2C%22D_151161693_6%22)", + "equals(D_204421360,797221287)", + "equals(numberOfChoicesSelected(D_442059084,0),1)", + "greaterThan(numberOfChoicesSelected(D_442059084,0),1)", + "doesNotExist('D_442059084')", + "equals(D_204421360,500744195)", + "equals(numberOfChoicesSelected(D_829749579,0),1)", + "greaterThan(numberOfChoicesSelected(D_829749579,0),1)", + "doesNotExist('D_829749579')", + "equals(D_204421360,383015037)", + "equals(numberOfChoicesSelected(D_618482103,0),1)", + "greaterThan(numberOfChoicesSelected(D_618482103,0),1)", + "doesNotExist('D_618482103')", + "equals(D_517976064,904954920)", + "equals(numberOfChoicesSelected(D_894610280,0),1)", + "greaterThan(numberOfChoicesSelected(D_894610280,0),1)", + "doesNotExist('D_894610280')", + "equals(D_517976064,619501806)", + "equals(numberOfChoicesSelected(D_222110888,0),1)", + "greaterThan(numberOfChoicesSelected(D_222110888,0),1)", + "doesNotExist('D_222110888')", + "equals(D_517976064,203192394)", + "equals(numberOfChoicesSelected(D_564242877,0),1)", + "greaterThan(numberOfChoicesSelected(D_564242877,0),1)", + "doesNotExist('D_564242877')", + "equals(D_517976064,261267696)", + "equals(numberOfChoicesSelected(D_635874413,0),1)", + "greaterThan(numberOfChoicesSelected(D_635874413,0),1)", + "doesNotExist('D_635874413')", + "equals(D_517976064,926584500)", + "equals(numberOfChoicesSelected(D_371748514,0),1)", + "greaterThan(numberOfChoicesSelected(D_371748514,0),1)", + "doesNotExist('D_371748514')", + "equals(D_517976064,420058896)", + "equals(numberOfChoicesSelected(D_858525957,0),1)", + "greaterThan(numberOfChoicesSelected(D_858525957,0),1)", + "doesNotExist('D_858525957')", + "equals(D_517976064,868685663)", + "equals(numberOfChoicesSelected(D_787591805,0),1)", + "greaterThan(numberOfChoicesSelected(D_787591805,0),1)", + "doesNotExist('D_787591805')", + "equals(D_517976064,760484278)", + "equals(numberOfChoicesSelected(D_900299856,0),1)", + "greaterThan(numberOfChoicesSelected(D_900299856,0),1)", + "doesNotExist('D_900299856')", + "equals(D_517976064,345916806)", + "equals(numberOfChoicesSelected(D_149884127,0),1)", + "greaterThan(numberOfChoicesSelected(D_149884127,0),1)", + "doesNotExist('D_149884127')", + "equals(D_517976064,936042582)", + "equals(numberOfChoicesSelected(D_845164425,0),1)", + "greaterThan(numberOfChoicesSelected(D_845164425,0),1)", + "doesNotExist('D_845164425')", + "equals(D_517976064,182827107)", + "equals(numberOfChoicesSelected(D_187772368,0),1)", + "greaterThan(numberOfChoicesSelected(D_187772368,0),1)", + "doesNotExist('D_187772368')", + "equals(D_517976064,734860227)", + "equals(numberOfChoicesSelected(D_815229596,0),1)", + "greaterThan(numberOfChoicesSelected(D_815229596,0),1)", + "doesNotExist('D_815229596')", + "equals(D_517976064,371531887)", + "equals(numberOfChoicesSelected(D_262305264,0),1)", + "greaterThan(numberOfChoicesSelected(D_262305264,0),1)", + "doesNotExist('D_262305264')", + "equals(D_517976064,423631576)", + "equals(numberOfChoicesSelected(D_409324592,0),1)", + "greaterThan(numberOfChoicesSelected(D_409324592,0),1)", + "doesNotExist('D_409324592')", + "equals(D_517976064,181769837)", + "equals(numberOfChoicesSelected(D_895837106,0),1)", + "greaterThan(numberOfChoicesSelected(D_895837106,0),1)", + "doesNotExist('D_895837106')", + "valueIsOneOf('D_750420077',578416151,434651539) or valueEquals('D_407056417',536341288)", + "equals(D_591723682,353358909)", + "doesNotEqual(D_591723682,353358909)", + "equals(D_479628567,370923702)", + "equals(D_674976924,958538953)", + "equals(D_674976924,274062548)" + ], + "sitesByScope": { + "grid-inline": 3, + "grid-row": 5, + "inline": 1025, + "question": 362, + "response": 7 + }, + "sitesByAttribute": { + "data-displayif": 5, + "displayif": 1397 + } + }, + "grids": [ + { + "questionId": "D_392658845", + "questionIndex": 452, + "rowQuestionIds": [ + "D_699101535", + "D_652561589", + "D_589522790", + "D_239572239" + ], + "rowCount": 4, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "503218834", + "464753847", + "729681071", + "258023209", + "638092100", + "628177728", + "919739344", + "755558825", + "949555271", + "201002865" + ] + }, + { + "questionId": "D_649352910", + "questionIndex": 454, + "rowQuestionIds": [ + "D_654385712", + "D_263483736", + "D_806746224", + "D_396649512" + ], + "rowCount": 4, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "503218834", + "464753847", + "729681071", + "258023209", + "638092100", + "628177728", + "919739344", + "755558825", + "949555271", + "201002865" + ] + }, + { + "questionId": "D_733547268", + "questionIndex": 456, + "rowQuestionIds": [ + "D_980120253", + "D_993029890", + "D_980196073", + "D_115422925", + "D_151161693" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "648960871", + "239152340", + "582006876", + "645894551", + "996315715", + "671267928", + "647504893" + ] + }, + { + "questionId": "D_128705365", + "questionIndex": 457, + "rowQuestionIds": [ + "D_607323377", + "D_491484323", + "D_588637585", + "D_199039940", + "D_986476579" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "428999623", + "248303092", + "206020811", + "264163865", + "638092100", + "628177728", + "805918496" + ] + }, + { + "questionId": "D_421859821", + "questionIndex": 536, + "rowQuestionIds": [ + "D_220238240", + "D_151006826", + "D_965290070", + "D_781115321", + "D_453071098", + "D_513065503", + "D_257137378" + ], + "rowCount": 7, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "104430631", + "525779785", + "565036180", + "284343405", + "270994579" + ] + }, + { + "questionId": "D_981441822", + "questionIndex": 538, + "rowQuestionIds": [ + "D_403155173", + "D_576621769", + "D_988508028", + "D_186488870", + "D_922388461", + "D_760686611", + "D_354550061", + "D_179705366", + "D_955609858" + ], + "rowCount": 9, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "514068832", + "774439579", + "747099514", + "977681388" + ] + } + ], + "loops": [ + { + "loopIndex": "1", + "loopMaxQuestionIds": [ + "D_405571048" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 104, + 113, + 122, + 131, + 140, + 149, + 158, + 167, + 176, + 185, + 194, + 203, + 212, + 221, + 230, + 239, + 248, + 257, + 266, + 275, + 284, + 293, + 302, + 311, + 320 + ], + "boundaryIndex": 329 + } + ], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 360, + "processorQuestionCount": 554, + "processedQuestionCount": 554, + "renderedFormCount": 554, + "controlCount": 3466, + "responseControlCount": 1600, + "explicitTransitionCount": 592, + "sequentialAdjacencyCount": 553, + "resolvedExplicitTransitionCount": 592, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 1402, + "gridQuestionCount": 6, + "gridRowCount": 34, + "loopStartCount": 25, + "loopDefinitionCount": 1, + "loopExpandedQuestionCount": 225, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 691 + } + }, + { + "schemaVersion": 1, + "module": "module3", + "locale": "en", + "language": "en", + "path": "prod/module3.txt", + "sha256": "73f6a1ba8bb0ce4b3c1cb56566b3c46b0d8552ff299be81a57ed6c4d4597ea8f", + "questName": "D_965707586", + "version": "1.6", + "authoredMarkerCount": 314, + "runtimeQuestionIds": [ + "INTROM3", + "INTROSMO", + "D_947205597?", + "D_763164658?", + "D_194557808?", + "D_790436165?", + "D_639684251?", + "D_798549704?", + "D_227439141?", + "D_318569032?", + "D_204884007?", + "D_400969127?", + "D_820220019?", + "D_304657762?", + "D_815776236?", + "D_560293868?", + "D_399659169?", + "D_667002790?", + "D_534351312?", + "D_594608533?", + "D_923371868?", + "D_445537380?", + "D_387489930?", + "D_493642768?", + "D_821629868?", + "D_434034366?", + "D_842088582?", + "D_624111331?", + "D_761037053?", + "D_550244580?", + "D_751046675?", + "D_238422161?", + "D_716554850?", + "D_724079256?", + "D_360277949?", + "D_242276545?", + "D_183546626?", + "D_982470672?", + "D_333072838?", + "D_388614168?", + "D_656911826?", + "D_370901901?", + "D_240089798?", + "D_536216847?", + "D_622394149?", + "D_442002787?", + "D_208578552?", + "D_480155628?", + "D_640944113?", + "D_866159532?", + "D_182431332?", + "D_241771440?", + "D_814115676?", + "D_564438246?", + "D_789271762?", + "D_622210148?", + "D_457290610?", + "D_997412869?", + "D_395480458?", + "D_674378360?", + "D_780721084?", + "D_287715042?", + "D_145078867?", + "D_598954337?", + "D_103566006?", + "D_254689566?", + "D_951151270?", + "D_237415094?", + "D_868868325?", + "D_243519559?", + "D_365370279?", + "D_645681293?", + "D_440364083?", + "D_306320432?", + "D_213679054?", + "D_257300783?", + "D_101710639?", + "D_344631681?", + "D_872821562?", + "D_344583659?", + "D_671380198?", + "D_785139115?", + "D_549400618?", + "D_394049992?", + "D_673842048?", + "D_568113091?", + "D_537807075?", + "D_960332453?", + "D_495592561?", + "D_705282587?", + "D_133396976?", + "D_628770824?", + "D_558707243?", + "D_929034795?", + "D_995220236?", + "D_551301510?", + "D_981755099?", + "D_127871793?", + "D_154603497?", + "D_472007171?", + "D_787047261?", + "D_915293401?", + "D_268407776?", + "D_938333920?", + "D_585702271?", + "D_827661413?", + "D_356470028?", + "D_720305356?", + "D_951901114?", + "D_471435289?", + "D_445712879?", + "D_620425840?", + "D_798627028?", + "D_584608368?", + "D_921623945?", + "D_370253256?", + "D_470096941?", + "D_544356746?", + "D_559388168?", + "D_450151555?", + "D_546410473?", + "D_458395129?", + "D_845122623?", + "D_679300202?", + "D_146877593?", + "D_780685299?", + "D_311569789?", + "D_652477674?", + "D_780767323?", + "D_385490512?", + "D_119378795?", + "D_286598574?", + "D_689339933?", + "D_812430894?", + "D_178242940?", + "D_501545129?", + "D_197309242?", + "D_550850568?", + "D_277284423?", + "D_127038003?", + "D_337810964?", + "D_334292580?", + "D_738219521", + "D_252017075", + "INTROMAR", + "D_830608495?", + "SMMAR", + "D_319397722?", + "D_210016366?", + "D_116080663?", + "D_503058092?", + "D_180308733?", + "D_831873859?", + "D_594280517?", + "D_863664828?", + "D_129677435?", + "D_930208825?", + "D_719293094?", + "D_722122662?", + "D_556963634?", + "D_492742957?", + "D_377064836?", + "D_258291510?", + "D_175995366?", + "D_643099118?", + "D_864290328?", + "D_386950237?", + "D_480217113?", + "D_645361463?", + "D_882838859?", + "D_524914900?", + "D_140848765?", + "D_378254382?", + "D_891825638?", + "D_444759994?", + "D_746817928?", + "D_992757226?", + "D_405178123?", + "D_698314386?", + "D_363377579?", + "D_964154290?", + "D_171050898?", + "D_606675249?", + "D_411960217?", + "D_755923078?", + "D_381268397?", + "D_723763329?", + "D_724990284?", + "D_383748300?", + "D_199612020?", + "D_755298453?", + "D_777877159?", + "D_680697711?", + "D_325229459?", + "D_116510981?", + "D_942945860?", + "D_521073718?", + "D_859228803?", + "D_589885595?", + "D_659140794?", + "D_445187084?", + "D_142164107?", + "D_695423703?", + "D_816891201?", + "D_177252178?", + "D_116014097?", + "D_562595294?", + "D_268240612?", + "D_446121108?", + "D_319252189?", + "D_822964046?", + "D_878281875?", + "D_989594002?", + "D_596004621?", + "D_459096272?", + "D_586306068?", + "D_101170268?", + "D_908399883?", + "D_653198444?", + "D_742544044?", + "D_921663542?", + "D_818380721?", + "D_179510070?", + "D_700173707?", + "D_259481608?", + "D_786517174?", + "D_276575533?", + "D_891996278?", + "D_238953261?", + "D_517100968?", + "D_810324917?", + "D_922708844?", + "D_336810811?", + "D_925215135?", + "D_402300898?", + "D_677733128?", + "D_702729897?", + "D_795265404?", + "D_432310123?", + "D_355689185?", + "D_766791333?", + "D_742254559?", + "D_420155119?", + "D_532755074?", + "D_681586194?", + "D_370352501?", + "D_970325871?", + "D_536166591?", + "D_119257304?", + "D_933417196?", + "D_937550939?", + "D_258703325?", + "D_585819411?", + "D_265469878?", + "D_349510816?", + "D_375227733?", + "D_752795304?", + "D_417552256?", + "D_963040791?", + "D_685659661?", + "D_511145980?", + "D_227784207?", + "INTROALC", + "D_448968121?", + "D_429228540?", + "D_250456537?", + "D_556837046?", + "D_338467033?", + "D_480426504?", + "D_789159346?", + "D_447720598?", + "D_726847824?", + "D_481662464?", + "D_411088265?", + "D_880067330?", + "D_178665310?", + "D_242987943?", + "D_228752045?", + "D_103045461?", + "D_254739443?", + "ALCLIFE1", + "D_633553324", + "D_470862706", + "INTROSE", + "D_863593410?", + "D_525152373?", + "D_146319128?", + "D_910501158?", + "D_345457702?", + "D_711858159?", + "D_467751479?", + "D_858858333?", + "D_795761911?", + "D_662762705?", + "D_463908980?", + "D_605063358?", + "D_648216681?", + "D_466473224?", + "EYECOLORINTRO", + "D_857219333?", + "D_384562783?", + "D_394410256?", + "D_524971659?", + "D_352986465?", + "END" + ], + "responseControlsByType": { + "checkbox": 73, + "number": 142, + "radio": 823, + "text": 9 + }, + "explicitTransitions": { + "targets": [ + "D_337810964", + "D_624111331", + "D_194557808", + "D_798549704", + "D_304657762", + "D_227439141", + "D_318569032", + "D_204884007", + "D_400969127", + "D_820220019", + "D_560293868", + "D_182431332", + "D_761037053", + "D_238422161", + "D_982470672", + "D_716554850", + "D_724079256", + "D_360277949", + "D_242276545", + "D_183546626", + "D_388614168", + "D_306320432", + "D_241771440", + "D_789271762", + "D_780721084", + "D_622210148", + "D_457290610", + "D_997412869", + "D_395480458", + "D_674378360", + "D_145078867", + "D_981755099", + "D_213679054", + "D_344631681", + "D_394049992", + "D_872821562", + "D_344583659", + "D_671380198", + "D_785139115", + "D_549400618", + "D_568113091", + "D_559388168", + "D_127871793", + "D_787047261", + "D_356470028", + "D_915293401", + "D_268407776", + "D_938333920", + "D_585702271", + "D_827661413", + "D_951901114", + "D_450151555", + "D_845122623", + "D_780767323", + "D_679300202", + "D_146877593", + "D_780685299", + "D_311569789", + "D_652477674", + "D_119378795", + "D_738219521", + "INTROALC", + "D_524914900", + "D_210016366", + "D_180308733", + "D_719293094", + "D_831873859", + "D_594280517", + "D_863664828", + "D_129677435", + "D_930208825", + "D_377064836", + "D_556963634", + "D_325229459", + "D_140848765", + "D_444759994", + "D_964154290", + "D_746817928", + "D_992757226", + "D_405178123", + "D_698314386", + "D_363377579", + "D_755923078", + "D_606675249", + "D_101170268", + "D_116510981", + "D_859228803", + "D_816891201", + "D_589885595", + "D_659140794", + "D_445187084", + "D_142164107", + "D_695423703", + "D_268240612", + "D_116014097", + "D_355689185", + "D_908399883", + "D_921663542", + "D_276575533", + "D_818380721", + "D_179510070", + "D_700173707", + "D_259481608", + "D_786517174", + "D_810324917", + "D_238953261", + "D_766791333", + "D_532755074", + "D_933417196", + "D_681586194", + "D_370352501", + "D_970325871", + "D_536166591", + "D_119257304", + "D_265469878", + "D_258703325", + "D_429228540", + "INTROSE", + "D_250456537", + "D_447720598", + "D_480426504", + "ALCLIFE1", + "D_254739443", + "D_795761911", + "EYECOLORINTRO", + "D_463908980", + "D_466473224", + "D_648216681" + ], + "byKind": { + "default": 23, + "no-response": 42, + "response": 189 + }, + "byResolution": { + "exact": 254 + }, + "triggerTypes": { + "hidden": 65, + "radio": 189 + }, + "triggerValues": [ + "151488193", + "805449318", + "486319890", + "132232896", + "419415087", + "299561721", + "716761013", + "804785430", + "317567178", + "484055234", + "802197176", + "104430631", + "353358909", + "417208949", + "797736697", + "480609810", + "485011582", + "865134801", + "667010122", + "648960871", + "102445389", + "388196732", + "649327523", + "587052987", + "838336013" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_947205597,712653855)", + "doesNotExist('D_798549704') or valueEquals('D_798549704',317567178)", + "valueIsOneOf('D_798549704',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_639684251,804785430),and(or(or(equals(D_639684251,716761013),equals(D_639684251,299561721)),equals(D_639684251,419415087)),and(equals(D_798549704,484055234),equals(D_400969127,353358909)))),and(or(or(equals(D_639684251,716761013),equals(D_639684251,299561721)),equals(D_639684251,419415087)),and(equals(D_798549704,802197176),equals(D_400969127,353358909)))),1),equals(D_947205597,712653855))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",18)<=17 or valueOrDefault(\"D_204884007\",18)<=17)))", + "valueOrDefault('D_408696162',18)<=17", + "valueOrDefault('D_408696162',1)> 17", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,17),17))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,17),17))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,17))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",25)<=24 and valueOrDefault(\"D_204884007\",17)>=18)))", + "valueOrDefault('D_408696162',1)>=18 and valueOrDefault('D_408696162',25)<=24", + "valueOrDefault('D_408696162',19)< 18", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,24),24))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,24),24))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,24))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",30)<=29 and valueOrDefault(\"D_204884007\",24)>=25)))", + "valueOrDefault('D_408696162',1)>=25 and valueOrDefault('D_408696162',30)<=29", + "valueOrDefault('D_408696162',26)< 25", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,29),29))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,29),29))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,29))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",40)<=39 and valueOrDefault(\"D_204884007\",29)>=30)))", + "valueOrDefault('D_408696162',1)>30 and valueOrDefault('D_408696162',40)<=39", + "valueOrDefault('D_408696162',31)< 30", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,39),39))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,39),39))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,39))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",50)<=49 and valueOrDefault(\"D_204884007\",39)>=40)))", + "valueOrDefault('D_408696162',1)>=40 and valueOrDefault('D_408696162',50)<=49", + "valueOrDefault('D_408696162',41)< 40", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,49),49))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,49),49))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,49))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",60)<=59 and valueOrDefault(\"D_204884007\",49)>=50)))", + "valueOrDefault('D_408696162',1)>=50 and valueOrDefault('D_408696162',60)<=59", + "valueOrDefault('D_408696162',51)< 50", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,59),59))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,59),59))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,59))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",70)<=69 and valueOrDefault(\"D_204884007\",59)>=60)))", + "valueOrDefault('D_408696162',1)>=60 and valueOrDefault('D_408696162',70)<=69", + "valueOrDefault('D_408696162',61)< 60", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,69),69))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,69),69))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,69))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",69)>=70 or valueOrDefault(\"D_204884007\",69)>=70)))", + "valueOrDefault('age',1)>=70 and valueOrDefault('D_408696162',1)<70", + "valueOrDefault('D_408696162',1)>70", + "equals(D_947205597,706254326)", + "doesNotExist('D_238422161') or valueEquals('D_238422161',317567178)", + "valueIsOneOf('D_238422161',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_751046675,804785430),and(or(or(equals(D_751046675,716761013),equals(D_751046675,299561721)),equals(D_751046675,419415087)),and(equals(D_238422161,484055234),equals(D_242276545,353358909)))),and(or(or(equals(D_751046675,716761013),equals(D_751046675,299561721)),equals(D_751046675,419415087)),and(equals(D_238422161,802197176),equals(D_242276545,353358909)))),1),equals(D_947205597,706254326))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",18)<=17 or valueOrDefault(\"D_360277949\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_517801904,-1),0)", + "lessThan(isDefined(D_517801904,-1),0)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,17),17))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,17),17))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,17))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",25)<=24 and valueOrDefault(\"D_360277949\",17)>=18)))", + "valueOrDefault('D_517801904',1)>=18 and valueOrDefault('D_517801904',1)<=24", + "lessThan(isDefined(D_517801904,-1),18)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,24),24))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,24),24))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,24))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",30)<=29 and valueOrDefault(\"D_360277949\",24)>=25)))", + "valueOrDefault('D_517801904',1)>=25 and valueOrDefault('D_517801904',30)<=29", + "lessThan(isDefined(D_517801904,-1),25)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,29),29))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,29),29))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,29))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",40)<=39 and valueOrDefault(\"D_360277949\",29)>=30)))", + "valueOrDefault('D_517801904',1)>30 and valueOrDefault('D_517801904',40)<=39", + "lessThan(isDefined(D_517801904,-1),30)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,39),39))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,39),39))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,39))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",50)<=49 and valueOrDefault(\"D_360277949\",39)>=40)))", + "valueOrDefault('D_517801904',1)>=40 and valueOrDefault('D_517801904',50)<=49", + "lessThan(isDefined(D_517801904,-1),40)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,49),49))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,49),49))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,49))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",60)<=59 and valueOrDefault(\"D_360277949\",49)>=50)))", + "valueOrDefault('D_517801904',1)>=50 and valueOrDefault('D_517801904',60)<=59", + "lessThan(isDefined(D_517801904,-1),50)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,59),59))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,59),59))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,59))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",70)<=69 and valueOrDefault(\"D_360277949\",59)>=60)))", + "valueOrDefault('D_517801904',1)>=60 and valueOrDefault('D_517801904',70)<=69", + "lessThan(isDefined(D_517801904,-1),60)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,69),69))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,69),69))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,69))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",69)>=70 or valueOrDefault(\"D_360277949\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_517801904,-1),70)", + "lessThan(isDefined(D_517801904,-1),70)", + "equals(D_947205597,198133418)", + "doesNotExist('D_789271762') or valueEquals('D_789271762',317567178)", + "valueIsOneOf('D_789271762',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_564438246,804785430),and(or(or(equals(D_564438246,716761013),equals(D_564438246,299561721)),equals(D_564438246,419415087)),and(equals(D_789271762,484055234),equals(D_395480458,353358909)))),and(or(or(equals(D_564438246,716761013),equals(D_564438246,299561721)),equals(D_564438246,419415087)),and(equals(D_789271762,802197176),equals(D_395480458,353358909)))),1),equals(D_947205597,198133418))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",18)<=17 or valueOrDefault(\"D_997412869\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),0)", + "lessThan(isDefined(D_851145096,-1),0)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,17),17))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,17),17))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,17))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",25)<=24 and valueOrDefault(\"D_997412869\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),18)", + "lessThan(isDefined(D_851145096,-1),18)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,24),24))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,24),24))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,24))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",30)<=29 and valueOrDefault(\"D_997412869\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),25)", + "lessThan(isDefined(D_851145096,-1),25)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,29),29))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,29),29))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,29))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",40)<=39 and valueOrDefault(\"D_997412869\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),30)", + "lessThan(isDefined(D_851145096,-1),30)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,39),39))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,39),39))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,39))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",50)<=49 and valueOrDefault(\"D_997412869\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),40)", + "lessThan(isDefined(D_851145096,-1),40)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,49),49))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,49),49))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,49))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",60)<=59 and valueOrDefault(\"D_997412869\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),50)", + "lessThan(isDefined(D_851145096,-1),50)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,59),59))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,59),59))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,59))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",70)<=69 and valueOrDefault(\"D_997412869\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),60)", + "lessThan(isDefined(D_851145096,-1),60)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,69),69))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,69),69))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,69))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",69)>=70 or valueOrDefault(\"D_997412869\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),70)", + "lessThan(isDefined(D_851145096,-1),70)", + "equals(D_947205597,817381897)", + "doesNotExist('D_344631681') or valueEquals('D_344631681',317567178)", + "valueIsOneOf('D_344631681',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_101710639,804785430),and(or(or(equals(D_101710639,716761013),equals(D_101710639,299561721)),equals(D_101710639,419415087)),and(equals(D_344631681,484055234),equals(D_785139115,353358909)))),and(or(or(equals(D_101710639,716761013),equals(D_101710639,299561721)),equals(D_101710639,419415087)),and(equals(D_344631681,802197176),equals(D_785139115,353358909)))),1),equals(D_947205597,817381897))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",18)<=17 or valueOrDefault(\"D_671380198\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),0)", + "lessThan(isDefined(D_424527685,-1),0)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,17),17))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,17),17))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,17))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",25)<=24 and valueOrDefault(\"D_671380198\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),18)", + "lessThan(isDefined(D_424527685,-1),18)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,24),24))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,24),24))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,24))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",30)<=29 and valueOrDefault(\"D_671380198\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),25)", + "lessThan(isDefined(D_424527685,-1),25)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,29),29))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,29),29))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,29))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",40)<=39 and valueOrDefault(\"D_671380198\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),30)", + "lessThan(isDefined(D_424527685,-1),30)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,39),39))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,39),39))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,39))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",50)<=49 and valueOrDefault(\"D_671380198\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),40)", + "lessThan(isDefined(D_424527685,-1),40)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,49),49))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,49),49))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,49))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",60)<=59 and valueOrDefault(\"D_671380198\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),50)", + "lessThan(isDefined(D_424527685,-1),50)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,59),59))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,59),59))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,59))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",70)<=69 and valueOrDefault(\"D_671380198\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),60)", + "lessThan(isDefined(D_424527685,-1),60)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,69),69))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,69),69))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,69))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",69)>=70 or valueOrDefault(\"D_671380198\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),70)", + "lessThan(isDefined(D_424527685,-1),70)", + "equals(D_947205597,539648641)", + "doesNotExist('D_787047261') or valueEquals('D_787047261',317567178)", + "valueIsOneOf('D_787047261',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_472007171,804785430),and(or(or(equals(D_472007171,716761013),equals(D_472007171,299561721)),equals(D_472007171,419415087)),and(equals(D_787047261,484055234),equals(D_585702271,353358909)))),and(or(or(equals(D_472007171,716761013),equals(D_472007171,299561721)),equals(D_472007171,419415087)),and(equals(D_787047261,802197176),equals(D_585702271,353358909)))),1),equals(D_947205597,539648641))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",18)<=17 or valueOrDefault(\"D_938333920\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),0)", + "lessThan(isDefined(D_234430294,-1),0)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,17),17))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,17),17))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,17))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",25)<=24 and valueOrDefault(\"D_938333920\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),18)", + "lessThan(isDefined(D_234430294,-1),18)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,24),24))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,24),24))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,24))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",30)<=29 and valueOrDefault(\"D_938333920\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),25)", + "lessThan(isDefined(D_234430294,-1),25)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,29),29))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,29),29))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,29))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",40)<=39 and valueOrDefault(\"D_938333920\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),30)", + "lessThan(isDefined(D_234430294,-1),30)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,39),39))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,39),39))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,39))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",50)<=49 and valueOrDefault(\"D_938333920\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),40)", + "lessThan(isDefined(D_234430294,-1),40)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,49),49))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,49),49))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,49))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",60)<=59 and valueOrDefault(\"D_938333920\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),50)", + "lessThan(isDefined(D_234430294,-1),50)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,59),59))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,59),59))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,59))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",70)<=69 and valueOrDefault(\"D_938333920\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),60)", + "lessThan(isDefined(D_234430294,-1),60)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,69),69))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,69),69))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,69))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",69)>=70 or valueOrDefault(\"D_938333920\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),70)", + "lessThan(isDefined(D_234430294,-1),70)", + "equals(D_947205597,686310465)", + "doesNotExist('D_845122623') or valueEquals('D_845122623',317567178)", + "valueIsOneOf('D_845122623',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_458395129,804785430),and(or(or(equals(D_458395129,716761013),equals(D_458395129,299561721)),equals(D_458395129,419415087)),and(equals(D_845122623,484055234),equals(D_311569789,353358909)))),and(or(or(equals(D_458395129,716761013),equals(D_458395129,299561721)),equals(D_458395129,419415087)),and(equals(D_845122623,802197176),equals(D_311569789,353358909)))),1),equals(D_947205597,686310465))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",18)<=17 or valueOrDefault(\"D_780685299\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),0)", + "lessThan(isDefined(D_663551714,-1),0)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,17),17))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,17),17))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,17))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",25)<=24 and valueOrDefault(\"D_780685299\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),18)", + "lessThan(isDefined(D_663551714,-1),18)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,24),24))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,24),24))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,24))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",30)<=29 and valueOrDefault(\"D_780685299\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),25)", + "lessThan(isDefined(D_663551714,-1),25)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,29),29))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,29),29))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,29))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",40)<=39 and valueOrDefault(\"D_780685299\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),30)", + "lessThan(isDefined(D_663551714,-1),30)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,39),39))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,39),39))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,39))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",50)<=49 and valueOrDefault(\"D_780685299\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),40)", + "lessThan(isDefined(D_663551714,-1),40)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,49),49))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,49),49))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,49))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",60)<=59 and valueOrDefault(\"D_780685299\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),50)", + "lessThan(isDefined(D_663551714,-1),50)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,59),59))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,59),59))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,59))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",70)<=69 and valueOrDefault(\"D_780685299\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),60)", + "lessThan(isDefined(D_663551714,-1),60)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,69),69))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,69),69))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,69))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",69)>=70 or valueOrDefault(\"D_780685299\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),70)", + "lessThan(isDefined(D_663551714,-1),70)", + "greaterThan(difference(age%2C2)%2C18)", + "greaterThan(difference(age%2C2)%2C25)", + "greaterThan(difference(age%2C2)%2C30)", + "greaterThan(difference(age%2C2)%2C40)", + "greaterThan(difference(age%2C2)%2C50)", + "greaterThan(difference(age%2C2)%2C60)", + "greaterThanOrEqual(age%2C70)", + "equals(D_830608495,760521319)", + "doesNotExist('D_180308733') or valueEquals('D_180308733',317567178)", + "valueIsOneOf('D_180308733',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_503058092,804785430),and(or(or(equals(D_503058092,716761013),equals(D_503058092,299561721)),equals(D_503058092,419415087)),and(equals(D_180308733,484055234),equals(D_129677435,353358909)))),and(or(or(equals(D_503058092,716761013),equals(D_503058092,299561721)),equals(D_503058092,419415087)),and(equals(D_180308733,802197176),equals(D_129677435,353358909)))),1),equals(D_830608495,760521319))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",18)<=17 or valueOrDefault(\"D_863664828\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),0)", + "lessThan(isDefined(D_889949861,-1),0)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,17),17))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,17),17))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,17))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",25)<=24 and valueOrDefault(\"D_863664828\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),18)", + "lessThan(isDefined(D_889949861,-1),18)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,24),24))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,24),24))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,24))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",30)<=29 and valueOrDefault(\"D_863664828\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),25)", + "lessThan(isDefined(D_889949861,-1),25)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,29),29))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,29),29))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,29))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",40)<=39 and valueOrDefault(\"D_863664828\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),30)", + "lessThan(isDefined(D_889949861,-1),30)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,39),39))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,39),39))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,39))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",50)<=49 and valueOrDefault(\"D_863664828\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),40)", + "lessThan(isDefined(D_889949861,-1),40)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,49),49))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,49),49))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,49))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",60)<=59 and valueOrDefault(\"D_863664828\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),50)", + "lessThan(isDefined(D_889949861,-1),50)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,59),59))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,59),59))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,59))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",70)<=69 and valueOrDefault(\"D_863664828\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),60)", + "lessThan(isDefined(D_889949861,-1),60)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,69),69))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,69),69))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,69))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",69)>=70 or valueOrDefault(\"D_863664828\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),70)", + "lessThan(isDefined(D_889949861,-1),70)", + "equals(D_830608495,158841370)", + "doesNotExist('D_444759994') or valueEquals('D_444759994',317567178)", + "valueIsOneOf('D_444759994',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_891825638,804785430),and(or(or(equals(D_891825638,716761013),equals(D_891825638,299561721)),equals(D_891825638,419415087)),and(equals(D_444759994,484055234),equals(D_698314386,353358909)))),and(or(or(equals(D_891825638,716761013),equals(D_891825638,299561721)),equals(D_891825638,419415087)),and(equals(D_444759994,802197176),equals(D_698314386,353358909)))),1),equals(D_830608495,158841370))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",18)<=17 or valueOrDefault(\"D_405178123\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),0)", + "lessThan(isDefined(D_628818510,-1),0)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,17),17))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,17),17))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,17))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",25)<=24 and valueOrDefault(\"D_405178123\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),18)", + "lessThan(isDefined(D_628818510,-1),18)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,24),24))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,24),24))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,24))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",30)<=29 and valueOrDefault(\"D_405178123\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),25)", + "lessThan(isDefined(D_628818510,-1),25)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,29),29))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,29),29))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,29))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",40)<=39 and valueOrDefault(\"D_405178123\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),30)", + "lessThan(isDefined(D_628818510,-1),30)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,39),39))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,39),39))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,39))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",50)<=49 and valueOrDefault(\"D_405178123\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),40)", + "lessThan(isDefined(D_628818510,-1),40)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,49),49))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,49),49))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,49))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",60)<=59 and valueOrDefault(\"D_405178123\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),50)", + "lessThan(isDefined(D_628818510,-1),50)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,59),59))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,59),59))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,59))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",70)<=69 and valueOrDefault(\"D_405178123\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),60)", + "lessThan(isDefined(D_628818510,-1),60)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,69),69))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,69),69))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,69))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",69)>=70 or valueOrDefault(\"D_405178123\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),70)", + "lessThan(isDefined(D_628818510,-1),70)", + "equals(D_830608495,349034127)", + "valueIsOneOf('D_859228803',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_521073718,804785430),and(or(or(equals(D_521073718,716761013),equals(D_521073718,299561721)),equals(D_521073718,419415087)),and(equals(D_859228803,484055234),equals(D_142164107,353358909)))),and(or(or(equals(D_521073718,716761013),equals(D_521073718,299561721)),equals(D_521073718,419415087)),and(equals(D_859228803,802197176),equals(D_142164107,353358909)))),1),equals(D_830608495,349034127))", + "doesNotExist('D_859228803') or valueEquals('D_859228803',317567178)", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",18)<=17 or valueOrDefault(\"D_445187084\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),0)", + "lessThan(isDefined(D_742716427,-1),0)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,17),17))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,17),17))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,17))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",25)<=24 and valueOrDefault(\"D_445187084\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),18)", + "lessThan(isDefined(D_742716427,-1),18)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,24),24))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,24),24))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,24))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",30)<=29 and valueOrDefault(\"D_445187084\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),25)", + "lessThan(isDefined(D_742716427,-1),25)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,29),29))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,29),29))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,29))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",40)<=39 and valueOrDefault(\"D_445187084\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),30)", + "lessThan(isDefined(D_742716427,-1),30)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,39),39))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,39),39))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,39))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",50)<=49 and valueOrDefault(\"D_445187084\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),40)", + "lessThan(isDefined(D_742716427,-1),40)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,49),49))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,49),49))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,49))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",60)<=59 and valueOrDefault(\"D_445187084\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),50)", + "lessThan(isDefined(D_742716427,-1),50)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,59),59))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,59),59))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,59))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",70)<=69 and valueOrDefault(\"D_445187084\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),60)", + "lessThan(isDefined(D_742716427,-1),60)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,69),69))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,69),69))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,69))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",69)>=70 or valueOrDefault(\"D_445187084\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),70)", + "lessThan(isDefined(D_742716427,-1),70)", + "equals(D_830608495,713594719)", + "valueIsOneOf('D_921663542',484055234,802197176)", + "doesNotExist('D_921663542') or valueEquals('D_921663542',317567178)", + "and(doesNotEqual(or(or(equals(D_742544044,804785430),and(or(or(equals(D_742544044,716761013),equals(D_742544044,299561721)),equals(D_742544044,419415087)),and(equals(D_921663542,484055234),equals(D_259481608,353358909)))),and(or(or(equals(D_742544044,716761013),equals(D_742544044,299561721)),equals(D_742544044,419415087)),and(equals(D_921663542,802197176),equals(D_259481608,353358909)))),1),equals(D_830608495,713594719))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",18)<=17 or valueOrDefault(\"D_700173707\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),0)", + "lessThan(isDefined(D_622843252,-1),0)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,17),17))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,17),17))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,17))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",25)<=24 and valueOrDefault(\"D_700173707\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),18)", + "lessThan(isDefined(D_622843252,-1),18)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,24),24))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,24),24))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,24))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",30)<=29 and valueOrDefault(\"D_700173707\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),25)", + "lessThan(isDefined(D_622843252,-1),25)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,29),29))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,29),29))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,29))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",40)<=39 and valueOrDefault(\"D_700173707\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),30)", + "lessThan(isDefined(D_622843252,-1),30)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,39),39))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,39),39))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,39))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",50)<=49 and valueOrDefault(\"D_700173707\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),40)", + "lessThan(isDefined(D_622843252,-1),40)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,49),49))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,49),49))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,49))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",60)<=59 and valueOrDefault(\"D_700173707\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),50)", + "lessThan(isDefined(D_622843252,-1),50)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,59),59))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,59),59))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,59))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",70)<=69 and valueOrDefault(\"D_700173707\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),60)", + "lessThan(isDefined(D_622843252,-1),60)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,69),69))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,69),69))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,69))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",69)>=70 or valueOrDefault(\"D_700173707\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),70)", + "lessThan(isDefined(D_622843252,-1),70)", + "equals(D_830608495,675129470)", + "doesNotExist('D_532755074') or valueEquals('D_532755074',317567178)", + "valueIsOneOf('D_532755074',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_420155119,804785430),and(or(or(equals(D_420155119,716761013),equals(D_420155119,299561721)),equals(D_420155119,419415087)),and(equals(D_532755074,484055234),equals(D_536166591,353358909)))),and(or(or(equals(D_420155119,716761013),equals(D_420155119,299561721)),equals(D_420155119,419415087)),and(equals(D_532755074,802197176),equals(D_536166591,353358909)))),1),equals(D_830608495,675129470))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",18)<=17 or valueOrDefault(\"D_970325871\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),0)", + "lessThan(isDefined(D_185168695,-1),0)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,17),17))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,17),17))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,17))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",25)<=24 and valueOrDefault(\"D_970325871\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),18)", + "lessThan(isDefined(D_185168695,-1),18)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,24),24))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,24),24))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,24))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",30)<=29 and valueOrDefault(\"D_970325871\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),25)", + "lessThan(isDefined(D_185168695,-1),25)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,29),29))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,29),29))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,29))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",40)<=39 and valueOrDefault(\"D_970325871\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),30)", + "lessThan(isDefined(D_185168695,-1),30)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,39),39))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,39),39))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,39))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",50)<=49 and valueOrDefault(\"D_970325871\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),40)", + "lessThan(isDefined(D_185168695,-1),40)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,49),49))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,49),49))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,49))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",60)<=59 and valueOrDefault(\"D_970325871\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),50)", + "lessThan(isDefined(D_185168695,-1),50)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,59),59))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,59),59))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,59))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",70)<=69 and valueOrDefault(\"D_970325871\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),60)", + "lessThan(isDefined(D_185168695,-1),60)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,69),69))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,69),69))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,69))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",69)>=70 or valueOrDefault(\"D_970325871\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),70)", + "lessThan(isDefined(D_185168695,-1),70)", + "equals(D_447720598,549079588)", + "equals(D_447720598,896953195)", + "equals(D_447720598,889023234)", + "equals(D_447720598,181769837)", + "valueEquals(\"D_429228540\",132232896) and valueLength(\"D_141874857\")>=1 and valueEquals(\"D_338467033\",353358909)", + "equals(D_407056417,536341288)", + "equals(D_407056417,654207589)", + "valueEquals(\"D_429228540\",132232896) and valueLength(\"D_141874857\")>=1 and (valueEquals(\"D_338467033\",353358909) or (valueEquals(\"D_338467033\",104430631) and exists(\"D_480426504\")))", + "doesNotEqual(isDefined(D_141874857,-1),-1)", + "equals(isDefined(D_141874857,-1),-1)", + "doesNotExist(\"D_480426504\")", + "exists(\"D_480426504\")", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D0%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D17", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D18%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D24", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D25%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D29", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D30%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D39", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D40%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D49", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D50%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D59", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D60%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D69", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D70", + "someSelected(\"D_294629316_1\",\"D_294629316_2\",\"D_294629316_3\",\"D_294629316_4\",\"D_294629316_5\",\"D_294629316_6\",\"D_294629316_7\",\"D_294629316_8\",\"D_164707243_1\",\"D_164707243_2\",\"D_164707243_3\",\"D_164707243_4\",\"D_164707243_5\",\"D_164707243_6\",\"D_164707243_7\",\"D_164707243_8\",\"D_771426895_1\",\"D_771426895_2\",\"D_771426895_3\",\"D_771426895_4\",\"D_771426895_5\",\"D_771426895_6\",\"D_771426895_7\",\"D_771426895_8\",\"D_818310825_1\",\"D_818310825_2\",\"D_818310825_3\",\"D_818310825_4\",\"D_818310825_5\",\"D_818310825_6\",\"D_818310825_7\",\"D_818310825_8\",\"D_843593800_1\",\"D_843593800_2\",\"D_843593800_3\",\"D_843593800_4\",\"D_843593800_5\",\"D_843593800_6\",\"D_843593800_7\",\"D_843593800_8\",\"D_175385712_1\",\"D_175385712_2\",\"D_175385712_3\",\"D_175385712_4\",\"D_175385712_5\",\"D_175385712_6\",\"D_175385712_7\",\"D_175385712_8\",\"D_772143730_1\",\"D_772143730_2\",\"D_772143730_3\",\"D_772143730_4\",\"D_772143730_5\",\"D_772143730_6\",\"D_772143730_7\",\"D_772143730_8\",\"D_602102163_1\",\"D_602102163_2\",\"D_602102163_3\",\"D_602102163_4\",\"D_602102163_5\",\"D_602102163_6\",\"D_602102163_7\",\"D_602102163_8\")", + "someSelected(%22D_294629316_1%22%2C%22D_294629316_2%22%2C%22D_294629316_3%22%2C%22D_294629316_4%22%2C%22D_294629316_5%22%2C%22D_294629316_6%22%2C%22D_294629316_7%22%2C%22D_294629316_8%22)", + "someSelected(%22D_164707243_1%22%2C%22D_164707243_2%22%2C%22D_164707243_3%22%2C%22D_164707243_4%22%2C%22D_164707243_5%22%2C%22D_164707243_6%22%2C%22D_164707243_7%22%2C%22D_164707243_8%22)", + "someSelected(%22D_771426895_1%22%2C%22D_771426895_2%22%2C%22D_771426895_3%22%2C%22D_771426895_4%22%2C%22D_771426895_5%22%2C%22D_771426895_6%22%2C%22D_771426895_7%22%2C%22D_771426895_8%22)", + "someSelected(%22D_818310825_1%22%2C%22D_818310825_2%22%2C%22D_818310825_3%22%2C%22D_818310825_4%22%2C%22D_818310825_5%22%2C%22D_818310825_6%22%2C%22D_818310825_7%22%2C%22D_818310825_8%22)", + "someSelected(%22D_843593800_1%22%2C%22D_843593800_2%22%2C%22D_843593800_3%22%2C%22D_843593800_4%22%2C%22D_843593800_5%22%2C%22D_843593800_6%22%2C%22D_843593800_7%22%2C%22D_843593800_8%22)", + "someSelected(%22D_175385712_1%22%2C%22D_175385712_2%22%2C%22D_175385712_3%22%2C%22D_175385712_4%22%2C%22D_175385712_5%22%2C%22D_175385712_6%22%2C%22D_175385712_7%22%2C%22D_175385712_8%22)", + "someSelected(%22D_772143730_1%22%2C%22D_772143730_2%22%2C%22D_772143730_3%22%2C%22D_772143730_4%22%2C%22D_772143730_5%22%2C%22D_772143730_6%22%2C%22D_772143730_7%22%2C%22D_772143730_8%22)", + "someSelected(%22D_602102163_1%22%2C%22D_602102163_2%22%2C%22D_602102163_3%22%2C%22D_602102163_4%22%2C%22D_602102163_5%22%2C%22D_602102163_6%22%2C%22D_602102163_7%22%2C%22D_602102163_8%22)", + "equals(equals(D_605063358,353358909),false)", + "equals(D_605063358,353358909)" + ], + "sitesByScope": { + "grid-inline": 8, + "grid-row": 23, + "inline": 557, + "question": 265 + }, + "sitesByAttribute": { + "data-displayif": 23, + "displayif": 830 + } + }, + "grids": [ + { + "questionId": "D_738219521", + "questionIndex": 142, + "rowQuestionIds": [ + "D_666840938", + "D_575237218", + "D_976863738", + "D_392301875", + "D_576358766", + "D_767711152", + "D_888898065", + "D_509170471" + ], + "rowCount": 8, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "162693263", + "924926068", + "417208949", + "797736697", + "480609810", + "485011582", + "865134801", + "667010122", + "648960871" + ] + }, + { + "questionId": "D_252017075", + "questionIndex": 143, + "rowQuestionIds": [ + "D_359443374", + "D_257564920", + "D_670036093", + "D_106272739" + ], + "rowCount": 4, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "503218834", + "759356722", + "668407984", + "448069154", + "485163252", + "160036380" + ] + }, + { + "questionId": "D_633553324", + "questionIndex": 281, + "rowQuestionIds": [ + "D_294629316", + "D_164707243", + "D_771426895", + "D_818310825", + "D_843593800", + "D_175385712", + "D_772143730", + "D_602102163" + ], + "rowCount": 8, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "265550580", + "950039557", + "402048066", + "522395860", + "756073829", + "858624942", + "424768954", + "687445652", + "333682419" + ] + }, + { + "questionId": "D_470862706", + "questionIndex": 282, + "rowQuestionIds": [ + "D_912659087", + "D_643512687", + "D_688123102", + "D_356133766", + "D_690918725", + "D_178609656", + "D_261957180", + "D_715827646" + ], + "rowCount": 8, + "responseTypes": [ + "checkbox" + ], + "responseValues": [ + "789689151", + "663253668", + "104676242", + "137733407" + ] + } + ], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 314, + "processorQuestionCount": 305, + "processedQuestionCount": 305, + "renderedFormCount": 305, + "controlCount": 2017, + "responseControlCount": 1047, + "explicitTransitionCount": 254, + "sequentialAdjacencyCount": 304, + "resolvedExplicitTransitionCount": 254, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 853, + "gridQuestionCount": 4, + "gridRowCount": 28, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 654 + } + }, + { + "schemaVersion": 1, + "module": "module3", + "locale": "es", + "language": "es", + "path": "prod/module3Spanish.txt", + "sha256": "4c78a6b2f3db419e87c7701b938a30c56c87c0c4ae2864d9eeb33e16a207e3b8", + "questName": "D_965707586", + "version": "1.6", + "authoredMarkerCount": 314, + "runtimeQuestionIds": [ + "INTROM3", + "INTROSMO", + "D_947205597?", + "D_763164658?", + "D_194557808?", + "D_790436165?", + "D_639684251?", + "D_798549704?", + "D_227439141?", + "D_318569032?", + "D_204884007?", + "D_400969127?", + "D_820220019?", + "D_304657762?", + "D_815776236?", + "D_560293868?", + "D_399659169?", + "D_667002790?", + "D_534351312?", + "D_594608533?", + "D_923371868?", + "D_445537380?", + "D_387489930?", + "D_493642768?", + "D_821629868?", + "D_434034366?", + "D_842088582?", + "D_624111331?", + "D_761037053?", + "D_550244580?", + "D_751046675?", + "D_238422161?", + "D_716554850?", + "D_724079256?", + "D_360277949?", + "D_242276545?", + "D_183546626?", + "D_982470672?", + "D_333072838?", + "D_388614168?", + "D_656911826?", + "D_370901901?", + "D_240089798?", + "D_536216847?", + "D_622394149?", + "D_442002787?", + "D_208578552?", + "D_480155628?", + "D_640944113?", + "D_866159532?", + "D_182431332?", + "D_241771440?", + "D_814115676?", + "D_564438246?", + "D_789271762?", + "D_622210148?", + "D_457290610?", + "D_997412869?", + "D_395480458?", + "D_674378360?", + "D_780721084?", + "D_287715042?", + "D_145078867?", + "D_598954337?", + "D_103566006?", + "D_254689566?", + "D_951151270?", + "D_237415094?", + "D_868868325?", + "D_243519559?", + "D_365370279?", + "D_645681293?", + "D_440364083?", + "D_306320432?", + "D_213679054?", + "D_257300783?", + "D_101710639?", + "D_344631681?", + "D_872821562?", + "D_344583659?", + "D_671380198?", + "D_785139115?", + "D_549400618?", + "D_394049992?", + "D_673842048?", + "D_568113091?", + "D_537807075?", + "D_960332453?", + "D_495592561?", + "D_705282587?", + "D_133396976?", + "D_628770824?", + "D_558707243?", + "D_929034795?", + "D_995220236?", + "D_551301510?", + "D_981755099?", + "D_127871793?", + "D_154603497?", + "D_472007171?", + "D_787047261?", + "D_915293401?", + "D_268407776?", + "D_938333920?", + "D_585702271?", + "D_827661413?", + "D_356470028?", + "D_720305356?", + "D_951901114?", + "D_471435289?", + "D_445712879?", + "D_620425840?", + "D_798627028?", + "D_584608368?", + "D_921623945?", + "D_370253256?", + "D_470096941?", + "D_544356746?", + "D_559388168?", + "D_450151555?", + "D_546410473?", + "D_458395129?", + "D_845122623?", + "D_679300202?", + "D_146877593?", + "D_780685299?", + "D_311569789?", + "D_652477674?", + "D_780767323?", + "D_385490512?", + "D_119378795?", + "D_286598574?", + "D_689339933?", + "D_812430894?", + "D_178242940?", + "D_501545129?", + "D_197309242?", + "D_550850568?", + "D_277284423?", + "D_127038003?", + "D_337810964?", + "D_334292580?", + "D_738219521", + "D_252017075", + "INTROMAR", + "D_830608495?", + "SMMAR", + "D_319397722?", + "D_210016366?", + "D_116080663?", + "D_503058092?", + "D_180308733?", + "D_831873859?", + "D_594280517?", + "D_863664828?", + "D_129677435?", + "D_930208825?", + "D_719293094?", + "D_722122662?", + "D_556963634?", + "D_492742957?", + "D_377064836?", + "D_258291510?", + "D_175995366?", + "D_643099118?", + "D_864290328?", + "D_386950237?", + "D_480217113?", + "D_645361463?", + "D_882838859?", + "D_524914900?", + "D_140848765?", + "D_378254382?", + "D_891825638?", + "D_444759994?", + "D_746817928?", + "D_992757226?", + "D_405178123?", + "D_698314386?", + "D_363377579?", + "D_964154290?", + "D_171050898?", + "D_606675249?", + "D_411960217?", + "D_755923078?", + "D_381268397?", + "D_723763329?", + "D_724990284?", + "D_383748300?", + "D_199612020?", + "D_755298453?", + "D_777877159?", + "D_680697711?", + "D_325229459?", + "D_116510981?", + "D_942945860?", + "D_521073718?", + "D_859228803?", + "D_589885595?", + "D_659140794?", + "D_445187084?", + "D_142164107?", + "D_695423703?", + "D_816891201?", + "D_177252178?", + "D_116014097?", + "D_562595294?", + "D_268240612?", + "D_446121108?", + "D_319252189?", + "D_822964046?", + "D_878281875?", + "D_989594002?", + "D_596004621?", + "D_459096272?", + "D_586306068?", + "D_101170268?", + "D_908399883?", + "D_653198444?", + "D_742544044?", + "D_921663542?", + "D_818380721?", + "D_179510070?", + "D_700173707?", + "D_259481608?", + "D_786517174?", + "D_276575533?", + "D_891996278?", + "D_238953261?", + "D_517100968?", + "D_810324917?", + "D_922708844?", + "D_336810811?", + "D_925215135?", + "D_402300898?", + "D_677733128?", + "D_702729897?", + "D_795265404?", + "D_432310123?", + "D_355689185?", + "D_766791333?", + "D_742254559?", + "D_420155119?", + "D_532755074?", + "D_681586194?", + "D_370352501?", + "D_970325871?", + "D_536166591?", + "D_119257304?", + "D_933417196?", + "D_937550939?", + "D_258703325?", + "D_585819411?", + "D_265469878?", + "D_349510816?", + "D_375227733?", + "D_752795304?", + "D_417552256?", + "D_963040791?", + "D_685659661?", + "D_511145980?", + "D_227784207?", + "INTROALC", + "D_448968121?", + "D_429228540?", + "D_250456537?", + "D_556837046?", + "D_338467033?", + "D_480426504?", + "D_789159346?", + "D_447720598?", + "D_726847824?", + "D_481662464?", + "D_411088265?", + "D_880067330?", + "D_178665310?", + "D_242987943?", + "D_228752045?", + "D_103045461?", + "D_254739443?", + "ALCLIFE1", + "D_633553324", + "D_470862706", + "INTROSE", + "D_863593410?", + "D_525152373?", + "D_146319128?", + "D_910501158?", + "D_345457702?", + "D_711858159?", + "D_467751479?", + "D_858858333?", + "D_795761911?", + "D_662762705?", + "D_463908980?", + "D_605063358?", + "D_648216681?", + "D_466473224?", + "EYECOLORINTRO", + "D_857219333?", + "D_384562783?", + "D_394410256?", + "D_524971659?", + "D_352986465?", + "END" + ], + "responseControlsByType": { + "checkbox": 73, + "number": 142, + "radio": 823, + "text": 9 + }, + "explicitTransitions": { + "targets": [ + "D_337810964", + "D_624111331", + "D_194557808", + "D_798549704", + "D_304657762", + "D_227439141", + "D_318569032", + "D_204884007", + "D_400969127", + "D_820220019", + "D_560293868", + "D_182431332", + "D_761037053", + "D_238422161", + "D_982470672", + "D_716554850", + "D_724079256", + "D_360277949", + "D_242276545", + "D_183546626", + "D_388614168", + "D_306320432", + "D_241771440", + "D_789271762", + "D_780721084", + "D_622210148", + "D_457290610", + "D_997412869", + "D_395480458", + "D_674378360", + "D_145078867", + "D_981755099", + "D_213679054", + "D_344631681", + "D_394049992", + "D_872821562", + "D_344583659", + "D_671380198", + "D_785139115", + "D_549400618", + "D_568113091", + "D_559388168", + "D_127871793", + "D_787047261", + "D_356470028", + "D_915293401", + "D_268407776", + "D_938333920", + "D_585702271", + "D_827661413", + "D_951901114", + "D_450151555", + "D_845122623", + "D_780767323", + "D_679300202", + "D_146877593", + "D_780685299", + "D_311569789", + "D_652477674", + "D_119378795", + "D_738219521", + "INTROALC", + "D_524914900", + "D_210016366", + "D_180308733", + "D_719293094", + "D_831873859", + "D_594280517", + "D_863664828", + "D_129677435", + "D_930208825", + "D_377064836", + "D_556963634", + "D_325229459", + "D_140848765", + "D_444759994", + "D_964154290", + "D_746817928", + "D_992757226", + "D_405178123", + "D_698314386", + "D_363377579", + "D_755923078", + "D_606675249", + "D_101170268", + "D_116510981", + "D_859228803", + "D_816891201", + "D_589885595", + "D_659140794", + "D_445187084", + "D_142164107", + "D_695423703", + "D_268240612", + "D_116014097", + "D_355689185", + "D_908399883", + "D_921663542", + "D_276575533", + "D_818380721", + "D_179510070", + "D_700173707", + "D_259481608", + "D_786517174", + "D_810324917", + "D_238953261", + "D_766791333", + "D_532755074", + "D_933417196", + "D_681586194", + "D_370352501", + "D_970325871", + "D_536166591", + "D_119257304", + "D_265469878", + "D_258703325", + "D_429228540", + "INTROSE", + "D_250456537", + "D_447720598", + "D_480426504", + "ALCLIFE1", + "D_254739443", + "D_795761911", + "EYECOLORINTRO", + "D_463908980", + "D_466473224", + "D_648216681" + ], + "byKind": { + "default": 23, + "no-response": 42, + "response": 189 + }, + "byResolution": { + "exact": 254 + }, + "triggerTypes": { + "hidden": 65, + "radio": 189 + }, + "triggerValues": [ + "151488193", + "805449318", + "486319890", + "132232896", + "419415087", + "299561721", + "716761013", + "804785430", + "317567178", + "484055234", + "802197176", + "104430631", + "353358909", + "417208949", + "797736697", + "480609810", + "485011582", + "865134801", + "667010122", + "648960871", + "102445389", + "388196732", + "649327523", + "587052987", + "838336013" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_947205597,712653855)", + "doesNotExist('D_798549704') or valueEquals('D_798549704',317567178)", + "valueIsOneOf('D_798549704',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_639684251,804785430),and(or(or(equals(D_639684251,716761013),equals(D_639684251,299561721)),equals(D_639684251,419415087)),and(equals(D_798549704,484055234),equals(D_400969127,353358909)))),and(or(or(equals(D_639684251,716761013),equals(D_639684251,299561721)),equals(D_639684251,419415087)),and(equals(D_798549704,802197176),equals(D_400969127,353358909)))),1),equals(D_947205597,712653855))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",18)<=17 or valueOrDefault(\"D_204884007\",18)<=17)))", + "valueOrDefault('D_408696162',18)<=17", + "valueOrDefault('D_408696162',1)> 17", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,17),17))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,17),17))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,17))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",25)<=24 and valueOrDefault(\"D_204884007\",17)>=18)))", + "valueOrDefault('D_408696162',1)>=18 and valueOrDefault('D_408696162',25)<=24", + "valueOrDefault('D_408696162',19)< 18", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,24),24))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,24),24))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,24))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",30)<=29 and valueOrDefault(\"D_204884007\",24)>=25)))", + "valueOrDefault('D_408696162',1)>=25 and valueOrDefault('D_408696162',30)<=29", + "valueOrDefault('D_408696162',26)< 25", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,29),29))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,29),29))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,29))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",40)<=39 and valueOrDefault(\"D_204884007\",29)>=30)))", + "valueOrDefault('D_408696162',1)>30 and valueOrDefault('D_408696162',40)<=39", + "valueOrDefault('D_408696162',31)< 30", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,39),39))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,39),39))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,39))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",50)<=49 and valueOrDefault(\"D_204884007\",39)>=40)))", + "valueOrDefault('D_408696162',1)>=40 and valueOrDefault('D_408696162',50)<=49", + "valueOrDefault('D_408696162',41)< 40", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,49),49))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,49),49))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,49))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",60)<=59 and valueOrDefault(\"D_204884007\",49)>=50)))", + "valueOrDefault('D_408696162',1)>=50 and valueOrDefault('D_408696162',60)<=59", + "valueOrDefault('D_408696162',51)< 50", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,59),59))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,59),59))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,59))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",70)<=69 and valueOrDefault(\"D_204884007\",59)>=60)))", + "valueOrDefault('D_408696162',1)>=60 and valueOrDefault('D_408696162',70)<=69", + "valueOrDefault('D_408696162',61)< 60", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),lessThan(isDefined(D_204884007,69),69))", + "and(and(equals(D_400969127,353358909),doesNotEqual(isDefined(D_204884007,-1),-1)),greaterThanOrEqual(isDefined(D_204884007,69),69))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_400969127,353358909),equals(isDefined(D_204884007,-1),-1)),greaterThan(age,69))", + "(exists(\"D_408696162\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_639684251\",804785430)) and (valueOrDefault(\"D_408696162\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_408696162\",\"D_204884007\") and ((valueEquals(\"D_763164658\",132232896) and valueEquals(\"D_400969127\",353358909)) and (valueOrDefault(\"D_408696162\",69)>=70 or valueOrDefault(\"D_204884007\",69)>=70)))", + "valueOrDefault('age',1)>=70 and valueOrDefault('D_408696162',1)<70", + "valueOrDefault('D_408696162',1)>70", + "equals(D_947205597,706254326)", + "doesNotExist('D_238422161') or valueEquals('D_238422161',317567178)", + "valueIsOneOf('D_238422161',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_751046675,804785430),and(or(or(equals(D_751046675,716761013),equals(D_751046675,299561721)),equals(D_751046675,419415087)),and(equals(D_238422161,484055234),equals(D_242276545,353358909)))),and(or(or(equals(D_751046675,716761013),equals(D_751046675,299561721)),equals(D_751046675,419415087)),and(equals(D_238422161,802197176),equals(D_242276545,353358909)))),1),equals(D_947205597,706254326))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",18)<=17 or valueOrDefault(\"D_360277949\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_517801904,-1),0)", + "lessThan(isDefined(D_517801904,-1),0)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,17),17))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,17),17))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,17))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",25)<=24 and valueOrDefault(\"D_360277949\",17)>=18)))", + "valueOrDefault('D_517801904',1)>=18 and valueOrDefault('D_517801904',1)<=24", + "lessThan(isDefined(D_517801904,-1),18)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,24),24))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,24),24))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,24))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",30)<=29 and valueOrDefault(\"D_360277949\",24)>=25)))", + "valueOrDefault('D_517801904',1)>=25 and valueOrDefault('D_517801904',30)<=29", + "lessThan(isDefined(D_517801904,-1),25)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,29),29))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,29),29))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,29))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",40)<=39 and valueOrDefault(\"D_360277949\",29)>=30)))", + "valueOrDefault('D_517801904',1)>30 and valueOrDefault('D_517801904',40)<=39", + "lessThan(isDefined(D_517801904,-1),30)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,39),39))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,39),39))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,39))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",50)<=49 and valueOrDefault(\"D_360277949\",39)>=40)))", + "valueOrDefault('D_517801904',1)>=40 and valueOrDefault('D_517801904',50)<=49", + "lessThan(isDefined(D_517801904,-1),40)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,49),49))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,49),49))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,49))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",60)<=59 and valueOrDefault(\"D_360277949\",49)>=50)))", + "valueOrDefault('D_517801904',1)>=50 and valueOrDefault('D_517801904',60)<=59", + "lessThan(isDefined(D_517801904,-1),50)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,59),59))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,59),59))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,59))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",70)<=69 and valueOrDefault(\"D_360277949\",59)>=60)))", + "valueOrDefault('D_517801904',1)>=60 and valueOrDefault('D_517801904',70)<=69", + "lessThan(isDefined(D_517801904,-1),60)", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),lessThan(isDefined(D_360277949,69),69))", + "and(and(equals(D_242276545,353358909),doesNotEqual(isDefined(D_360277949,-1),-1)),greaterThanOrEqual(isDefined(D_360277949,69),69))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_242276545,353358909),equals(isDefined(D_360277949,-1),-1)),greaterThan(age,69))", + "(exists(\"D_517801904\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_751046675\",804785430)) and (valueOrDefault(\"D_517801904\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_517801904\",\"D_360277949\") and ((valueEquals(\"D_624111331\",132232896) and valueEquals(\"D_242276545\",353358909)) and (valueOrDefault(\"D_517801904\",69)>=70 or valueOrDefault(\"D_360277949\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_517801904,-1),70)", + "lessThan(isDefined(D_517801904,-1),70)", + "equals(D_947205597,198133418)", + "doesNotExist('D_789271762') or valueEquals('D_789271762',317567178)", + "valueIsOneOf('D_789271762',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_564438246,804785430),and(or(or(equals(D_564438246,716761013),equals(D_564438246,299561721)),equals(D_564438246,419415087)),and(equals(D_789271762,484055234),equals(D_395480458,353358909)))),and(or(or(equals(D_564438246,716761013),equals(D_564438246,299561721)),equals(D_564438246,419415087)),and(equals(D_789271762,802197176),equals(D_395480458,353358909)))),1),equals(D_947205597,198133418))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",18)<=17 or valueOrDefault(\"D_997412869\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),0)", + "lessThan(isDefined(D_851145096,-1),0)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,17),17))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,17),17))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,17))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",25)<=24 and valueOrDefault(\"D_997412869\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),18)", + "lessThan(isDefined(D_851145096,-1),18)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,24),24))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,24),24))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,24))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",30)<=29 and valueOrDefault(\"D_997412869\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),25)", + "lessThan(isDefined(D_851145096,-1),25)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,29),29))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,29),29))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,29))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",40)<=39 and valueOrDefault(\"D_997412869\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),30)", + "lessThan(isDefined(D_851145096,-1),30)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,39),39))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,39),39))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,39))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",50)<=49 and valueOrDefault(\"D_997412869\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),40)", + "lessThan(isDefined(D_851145096,-1),40)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,49),49))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,49),49))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,49))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",60)<=59 and valueOrDefault(\"D_997412869\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),50)", + "lessThan(isDefined(D_851145096,-1),50)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,59),59))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,59),59))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,59))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",70)<=69 and valueOrDefault(\"D_997412869\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),60)", + "lessThan(isDefined(D_851145096,-1),60)", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),lessThan(isDefined(D_997412869,69),69))", + "and(and(equals(D_395480458,353358909),doesNotEqual(isDefined(D_997412869,-1),-1)),greaterThanOrEqual(isDefined(D_997412869,69),69))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_395480458,353358909),equals(isDefined(D_997412869,-1),-1)),greaterThan(age,69))", + "(exists(\"D_851145096\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_564438246\",804785430)) and (valueOrDefault(\"D_851145096\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_851145096\",\"D_997412869\") and ((valueEquals(\"D_182431332\",132232896) and valueEquals(\"D_395480458\",353358909)) and (valueOrDefault(\"D_851145096\",69)>=70 or valueOrDefault(\"D_997412869\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_851145096,-1),70)", + "lessThan(isDefined(D_851145096,-1),70)", + "equals(D_947205597,817381897)", + "doesNotExist('D_344631681') or valueEquals('D_344631681',317567178)", + "valueIsOneOf('D_344631681',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_101710639,804785430),and(or(or(equals(D_101710639,716761013),equals(D_101710639,299561721)),equals(D_101710639,419415087)),and(equals(D_344631681,484055234),equals(D_785139115,353358909)))),and(or(or(equals(D_101710639,716761013),equals(D_101710639,299561721)),equals(D_101710639,419415087)),and(equals(D_344631681,802197176),equals(D_785139115,353358909)))),1),equals(D_947205597,817381897))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",18)<=17 or valueOrDefault(\"D_671380198\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),0)", + "lessThan(isDefined(D_424527685,-1),0)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,17),17))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,17),17))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,17))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",25)<=24 and valueOrDefault(\"D_671380198\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),18)", + "lessThan(isDefined(D_424527685,-1),18)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,24),24))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,24),24))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,24))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",30)<=29 and valueOrDefault(\"D_671380198\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),25)", + "lessThan(isDefined(D_424527685,-1),25)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,29),29))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,29),29))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,29))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",40)<=39 and valueOrDefault(\"D_671380198\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),30)", + "lessThan(isDefined(D_424527685,-1),30)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,39),39))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,39),39))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,39))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",50)<=49 and valueOrDefault(\"D_671380198\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),40)", + "lessThan(isDefined(D_424527685,-1),40)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,49),49))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,49),49))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,49))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",60)<=59 and valueOrDefault(\"D_671380198\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),50)", + "lessThan(isDefined(D_424527685,-1),50)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,59),59))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,59),59))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,59))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",70)<=69 and valueOrDefault(\"D_671380198\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),60)", + "lessThan(isDefined(D_424527685,-1),60)", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),lessThan(isDefined(D_671380198,69),69))", + "and(and(equals(D_785139115,353358909),doesNotEqual(isDefined(D_671380198,-1),-1)),greaterThanOrEqual(isDefined(D_671380198,69),69))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_785139115,353358909),equals(isDefined(D_671380198,-1),-1)),greaterThan(age,69))", + "(exists(\"D_424527685\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_101710639\",804785430)) and (valueOrDefault(\"D_424527685\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_424527685\",\"D_671380198\") and ((valueEquals(\"D_306320432\",132232896) and valueEquals(\"D_785139115\",353358909)) and (valueOrDefault(\"D_424527685\",69)>=70 or valueOrDefault(\"D_671380198\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_424527685,-1),70)", + "lessThan(isDefined(D_424527685,-1),70)", + "equals(D_947205597,539648641)", + "doesNotExist('D_787047261') or valueEquals('D_787047261',317567178)", + "valueIsOneOf('D_787047261',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_472007171,804785430),and(or(or(equals(D_472007171,716761013),equals(D_472007171,299561721)),equals(D_472007171,419415087)),and(equals(D_787047261,484055234),equals(D_585702271,353358909)))),and(or(or(equals(D_472007171,716761013),equals(D_472007171,299561721)),equals(D_472007171,419415087)),and(equals(D_787047261,802197176),equals(D_585702271,353358909)))),1),equals(D_947205597,539648641))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",18)<=17 or valueOrDefault(\"D_938333920\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),0)", + "lessThan(isDefined(D_234430294,-1),0)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,17),17))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,17),17))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,17))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",25)<=24 and valueOrDefault(\"D_938333920\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),18)", + "lessThan(isDefined(D_234430294,-1),18)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,24),24))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,24),24))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,24))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",30)<=29 and valueOrDefault(\"D_938333920\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),25)", + "lessThan(isDefined(D_234430294,-1),25)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,29),29))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,29),29))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,29))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",40)<=39 and valueOrDefault(\"D_938333920\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),30)", + "lessThan(isDefined(D_234430294,-1),30)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,39),39))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,39),39))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,39))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",50)<=49 and valueOrDefault(\"D_938333920\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),40)", + "lessThan(isDefined(D_234430294,-1),40)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,49),49))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,49),49))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,49))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",60)<=59 and valueOrDefault(\"D_938333920\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),50)", + "lessThan(isDefined(D_234430294,-1),50)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,59),59))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,59),59))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,59))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",70)<=69 and valueOrDefault(\"D_938333920\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),60)", + "lessThan(isDefined(D_234430294,-1),60)", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),lessThan(isDefined(D_938333920,69),69))", + "and(and(equals(D_585702271,353358909),doesNotEqual(isDefined(D_938333920,-1),-1)),greaterThanOrEqual(isDefined(D_938333920,69),69))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_585702271,353358909),equals(isDefined(D_938333920,-1),-1)),greaterThan(age,69))", + "(exists(\"D_234430294\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_472007171\",804785430)) and (valueOrDefault(\"D_234430294\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_234430294\",\"D_938333920\") and ((valueEquals(\"D_981755099\",132232896) and valueEquals(\"D_585702271\",353358909)) and (valueOrDefault(\"D_234430294\",69)>=70 or valueOrDefault(\"D_938333920\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_234430294,-1),70)", + "lessThan(isDefined(D_234430294,-1),70)", + "equals(D_947205597,686310465)", + "doesNotExist('D_845122623') or valueEquals('D_845122623',317567178)", + "valueIsOneOf('D_845122623',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_458395129,804785430),and(or(or(equals(D_458395129,716761013),equals(D_458395129,299561721)),equals(D_458395129,419415087)),and(equals(D_845122623,484055234),equals(D_311569789,353358909)))),and(or(or(equals(D_458395129,716761013),equals(D_458395129,299561721)),equals(D_458395129,419415087)),and(equals(D_845122623,802197176),equals(D_311569789,353358909)))),1),equals(D_947205597,686310465))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",18)<=17 or valueOrDefault(\"D_780685299\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),0)", + "lessThan(isDefined(D_663551714,-1),0)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,17),17))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,17),17))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,17))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",25)<=24 and valueOrDefault(\"D_780685299\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),18)", + "lessThan(isDefined(D_663551714,-1),18)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,24),24))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,24),24))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,24))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",30)<=29 and valueOrDefault(\"D_780685299\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),25)", + "lessThan(isDefined(D_663551714,-1),25)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,29),29))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,29),29))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,29))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",40)<=39 and valueOrDefault(\"D_780685299\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),30)", + "lessThan(isDefined(D_663551714,-1),30)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,39),39))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,39),39))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,39))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",50)<=49 and valueOrDefault(\"D_780685299\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),40)", + "lessThan(isDefined(D_663551714,-1),40)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,49),49))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,49),49))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,49))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",60)<=59 and valueOrDefault(\"D_780685299\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),50)", + "lessThan(isDefined(D_663551714,-1),50)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,59),59))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,59),59))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,59))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",70)<=69 and valueOrDefault(\"D_780685299\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),60)", + "lessThan(isDefined(D_663551714,-1),60)", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),lessThan(isDefined(D_780685299,69),69))", + "and(and(equals(D_311569789,353358909),doesNotEqual(isDefined(D_780685299,-1),-1)),greaterThanOrEqual(isDefined(D_780685299,69),69))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_311569789,353358909),equals(isDefined(D_780685299,-1),-1)),greaterThan(age,69))", + "(exists(\"D_663551714\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_458395129\",804785430)) and (valueOrDefault(\"D_663551714\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_663551714\",\"D_780685299\") and ((valueEquals(\"D_559388168\",132232896) and valueEquals(\"D_311569789\",353358909)) and (valueOrDefault(\"D_663551714\",69)>=70 or valueOrDefault(\"D_780685299\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_663551714,-1),70)", + "lessThan(isDefined(D_663551714,-1),70)", + "greaterThan(difference(age%2C2)%2C18)", + "greaterThan(difference(age%2C2)%2C25)", + "greaterThan(difference(age%2C2)%2C30)", + "greaterThan(difference(age%2C2)%2C40)", + "greaterThan(difference(age%2C2)%2C50)", + "greaterThan(difference(age%2C2)%2C60)", + "greaterThanOrEqual(age%2C70)", + "equals(D_830608495,760521319)", + "doesNotExist('D_180308733') or valueEquals('D_180308733',317567178)", + "valueIsOneOf('D_180308733',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_503058092,804785430),and(or(or(equals(D_503058092,716761013),equals(D_503058092,299561721)),equals(D_503058092,419415087)),and(equals(D_180308733,484055234),equals(D_129677435,353358909)))),and(or(or(equals(D_503058092,716761013),equals(D_503058092,299561721)),equals(D_503058092,419415087)),and(equals(D_180308733,802197176),equals(D_129677435,353358909)))),1),equals(D_830608495,760521319))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",18)<=17 or valueOrDefault(\"D_863664828\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),0)", + "lessThan(isDefined(D_889949861,-1),0)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,17),17))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,17),17))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,17))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",25)<=24 and valueOrDefault(\"D_863664828\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),18)", + "lessThan(isDefined(D_889949861,-1),18)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,24),24))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,24),24))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,24))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",30)<=29 and valueOrDefault(\"D_863664828\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),25)", + "lessThan(isDefined(D_889949861,-1),25)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,29),29))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,29),29))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,29))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",40)<=39 and valueOrDefault(\"D_863664828\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),30)", + "lessThan(isDefined(D_889949861,-1),30)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,39),39))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,39),39))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,39))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",50)<=49 and valueOrDefault(\"D_863664828\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),40)", + "lessThan(isDefined(D_889949861,-1),40)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,49),49))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,49),49))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,49))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",60)<=59 and valueOrDefault(\"D_863664828\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),50)", + "lessThan(isDefined(D_889949861,-1),50)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,59),59))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,59),59))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,59))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",70)<=69 and valueOrDefault(\"D_863664828\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),60)", + "lessThan(isDefined(D_889949861,-1),60)", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),lessThan(isDefined(D_863664828,69),69))", + "and(and(equals(D_129677435,353358909),doesNotEqual(isDefined(D_863664828,-1),-1)),greaterThanOrEqual(isDefined(D_863664828,69),69))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_129677435,353358909),equals(isDefined(D_863664828,-1),-1)),greaterThan(age,69))", + "(exists(\"D_889949861\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_503058092\",804785430)) and (valueOrDefault(\"D_889949861\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_889949861\",\"D_863664828\") and ((valueEquals(\"D_319397722\",132232896) and valueEquals(\"D_129677435\",353358909)) and (valueOrDefault(\"D_889949861\",69)>=70 or valueOrDefault(\"D_863664828\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_889949861,-1),70)", + "lessThan(isDefined(D_889949861,-1),70)", + "equals(D_830608495,158841370)", + "doesNotExist('D_444759994') or valueEquals('D_444759994',317567178)", + "valueIsOneOf('D_444759994',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_891825638,804785430),and(or(or(equals(D_891825638,716761013),equals(D_891825638,299561721)),equals(D_891825638,419415087)),and(equals(D_444759994,484055234),equals(D_698314386,353358909)))),and(or(or(equals(D_891825638,716761013),equals(D_891825638,299561721)),equals(D_891825638,419415087)),and(equals(D_444759994,802197176),equals(D_698314386,353358909)))),1),equals(D_830608495,158841370))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",18)<=17 or valueOrDefault(\"D_405178123\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),0)", + "lessThan(isDefined(D_628818510,-1),0)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,17),17))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,17),17))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,17))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",25)<=24 and valueOrDefault(\"D_405178123\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),18)", + "lessThan(isDefined(D_628818510,-1),18)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,24),24))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,24),24))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,24))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",30)<=29 and valueOrDefault(\"D_405178123\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),25)", + "lessThan(isDefined(D_628818510,-1),25)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,29),29))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,29),29))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,29))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",40)<=39 and valueOrDefault(\"D_405178123\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),30)", + "lessThan(isDefined(D_628818510,-1),30)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,39),39))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,39),39))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,39))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",50)<=49 and valueOrDefault(\"D_405178123\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),40)", + "lessThan(isDefined(D_628818510,-1),40)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,49),49))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,49),49))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,49))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",60)<=59 and valueOrDefault(\"D_405178123\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),50)", + "lessThan(isDefined(D_628818510,-1),50)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,59),59))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,59),59))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,59))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",70)<=69 and valueOrDefault(\"D_405178123\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),60)", + "lessThan(isDefined(D_628818510,-1),60)", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),lessThan(isDefined(D_405178123,69),69))", + "and(and(equals(D_698314386,353358909),doesNotEqual(isDefined(D_405178123,-1),-1)),greaterThanOrEqual(isDefined(D_405178123,69),69))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_698314386,353358909),equals(isDefined(D_405178123,-1),-1)),greaterThan(age,69))", + "(exists(\"D_628818510\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_891825638\",804785430)) and (valueOrDefault(\"D_628818510\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_628818510\",\"D_405178123\") and ((valueEquals(\"D_524914900\",132232896) and valueEquals(\"D_698314386\",353358909)) and (valueOrDefault(\"D_628818510\",69)>=70 or valueOrDefault(\"D_405178123\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_628818510,-1),70)", + "lessThan(isDefined(D_628818510,-1),70)", + "equals(D_830608495,349034127)", + "valueIsOneOf('D_859228803',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_521073718,804785430),and(or(or(equals(D_521073718,716761013),equals(D_521073718,299561721)),equals(D_521073718,419415087)),and(equals(D_859228803,484055234),equals(D_142164107,353358909)))),and(or(or(equals(D_521073718,716761013),equals(D_521073718,299561721)),equals(D_521073718,419415087)),and(equals(D_859228803,802197176),equals(D_142164107,353358909)))),1),equals(D_830608495,349034127))", + "doesNotExist('D_859228803') or valueEquals('D_859228803',317567178)", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",18)<=17 or valueOrDefault(\"D_445187084\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),0)", + "lessThan(isDefined(D_742716427,-1),0)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,17),17))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,17),17))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,17))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",25)<=24 and valueOrDefault(\"D_445187084\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),18)", + "lessThan(isDefined(D_742716427,-1),18)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,24),24))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,24),24))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,24))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",30)<=29 and valueOrDefault(\"D_445187084\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),25)", + "lessThan(isDefined(D_742716427,-1),25)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,29),29))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,29),29))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,29))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",40)<=39 and valueOrDefault(\"D_445187084\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),30)", + "lessThan(isDefined(D_742716427,-1),30)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,39),39))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,39),39))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,39))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",50)<=49 and valueOrDefault(\"D_445187084\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),40)", + "lessThan(isDefined(D_742716427,-1),40)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,49),49))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,49),49))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,49))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",60)<=59 and valueOrDefault(\"D_445187084\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),50)", + "lessThan(isDefined(D_742716427,-1),50)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,59),59))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,59),59))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,59))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",70)<=69 and valueOrDefault(\"D_445187084\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),60)", + "lessThan(isDefined(D_742716427,-1),60)", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),lessThan(isDefined(D_445187084,69),69))", + "and(and(equals(D_142164107,353358909),doesNotEqual(isDefined(D_445187084,-1),-1)),greaterThanOrEqual(isDefined(D_445187084,69),69))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_142164107,353358909),equals(isDefined(D_445187084,-1),-1)),greaterThan(age,69))", + "(exists(\"D_742716427\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_521073718\",804785430)) and (valueOrDefault(\"D_742716427\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_742716427\",\"D_445187084\") and ((valueEquals(\"D_325229459\",132232896) and valueEquals(\"D_142164107\",353358909)) and (valueOrDefault(\"D_742716427\",69)>=70 or valueOrDefault(\"D_445187084\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_742716427,-1),70)", + "lessThan(isDefined(D_742716427,-1),70)", + "equals(D_830608495,713594719)", + "doesNotExist('D_921663542') or valueEquals('D_921663542',317567178)", + "valueIsOneOf('D_921663542',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_742544044,804785430),and(or(or(equals(D_742544044,716761013),equals(D_742544044,299561721)),equals(D_742544044,419415087)),and(equals(D_921663542,484055234),equals(D_259481608,353358909)))),and(or(or(equals(D_742544044,716761013),equals(D_742544044,299561721)),equals(D_742544044,419415087)),and(equals(D_921663542,802197176),equals(D_259481608,353358909)))),1),equals(D_830608495,713594719))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",18)<=17 or valueOrDefault(\"D_700173707\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),0)", + "lessThan(isDefined(D_622843252,-1),0)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,17),17))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,17),17))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,17))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,17))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",25)<=24 and valueOrDefault(\"D_700173707\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),18)", + "lessThan(isDefined(D_622843252,-1),18)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,24),24))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,24),24))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,24))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",30)<=29 and valueOrDefault(\"D_700173707\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),25)", + "lessThan(isDefined(D_622843252,-1),25)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,29),29))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,29),29))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,29))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",40)<=39 and valueOrDefault(\"D_700173707\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),30)", + "lessThan(isDefined(D_622843252,-1),30)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,39),39))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,39),39))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,39))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",50)<=49 and valueOrDefault(\"D_700173707\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),40)", + "lessThan(isDefined(D_622843252,-1),40)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,49),49))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,49),49))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,49))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",60)<=59 and valueOrDefault(\"D_700173707\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),50)", + "lessThan(isDefined(D_622843252,-1),50)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,59),59))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,59),59))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,59))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",70)<=69 and valueOrDefault(\"D_700173707\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),60)", + "lessThan(isDefined(D_622843252,-1),60)", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),lessThan(isDefined(D_700173707,69),69))", + "and(and(equals(D_259481608,353358909),doesNotEqual(isDefined(D_700173707,-1),-1)),greaterThanOrEqual(isDefined(D_700173707,69),69))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_259481608,353358909),equals(isDefined(D_700173707,-1),-1)),greaterThan(age,69))", + "(exists(\"D_622843252\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_742544044\",804785430)) and (valueOrDefault(\"D_622843252\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_622843252\",\"D_700173707\") and ((valueEquals(\"D_101170268\",132232896) and valueEquals(\"D_259481608\",353358909)) and (valueOrDefault(\"D_622843252\",69)>=70 or valueOrDefault(\"D_700173707\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_622843252,-1),70)", + "lessThan(isDefined(D_622843252,-1),70)", + "equals(D_830608495,675129470)", + "doesNotExist('D_532755074') or valueEquals('D_532755074',317567178)", + "valueIsOneOf('D_532755074',484055234,802197176)", + "and(doesNotEqual(or(or(equals(D_420155119,804785430),and(or(or(equals(D_420155119,716761013),equals(D_420155119,299561721)),equals(D_420155119,419415087)),and(equals(D_532755074,484055234),equals(D_536166591,353358909)))),and(or(or(equals(D_420155119,716761013),equals(D_420155119,299561721)),equals(D_420155119,419415087)),and(equals(D_532755074,802197176),equals(D_536166591,353358909)))),1),equals(D_830608495,675129470))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",18)<=17 or valueOrDefault(\"age\",18)<=17))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",18)<=17 or valueOrDefault(\"D_970325871\",18)<=17)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),0)", + "lessThan(isDefined(D_185168695,-1),0)", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",25)<=24 and valueOrDefault(\"age\",17)>=18))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",25)<=24 and valueOrDefault(\"D_970325871\",17)>=18)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),18)", + "lessThan(isDefined(D_185168695,-1),18)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,24),24))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,24),24))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,24))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,24))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",30)<=29 and valueOrDefault(\"age\",24)>=25))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",30)<=29 and valueOrDefault(\"D_970325871\",24)>=25)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),25)", + "lessThan(isDefined(D_185168695,-1),25)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,29),29))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,29),29))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,29))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,29))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",40)<=39 and valueOrDefault(\"age\",29)>=30))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",40)<=39 and valueOrDefault(\"D_970325871\",29)>=30)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),30)", + "lessThan(isDefined(D_185168695,-1),30)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,39),39))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,39),39))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,39))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,39))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",50)<=49 and valueOrDefault(\"age\",39)>=40))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",50)<=49 and valueOrDefault(\"D_970325871\",39)>=40)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),40)", + "lessThan(isDefined(D_185168695,-1),40)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,49),49))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,49),49))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,49))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,49))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",60)<=59 and valueOrDefault(\"age\",49)>=50))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",60)<=59 and valueOrDefault(\"D_970325871\",49)>=50)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),50)", + "lessThan(isDefined(D_185168695,-1),50)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,59),59))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,59),59))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,59))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,59))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",70)<=69 and valueOrDefault(\"age\",59)>=60))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",70)<=69 and valueOrDefault(\"D_970325871\",59)>=60)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),60)", + "lessThan(isDefined(D_185168695,-1),60)", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),lessThan(isDefined(D_970325871,69),69))", + "and(and(equals(D_536166591,353358909),doesNotEqual(isDefined(D_970325871,-1),-1)),greaterThanOrEqual(isDefined(D_970325871,69),69))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),lessThanOrEqual(age,69))", + "and(or(doesNotEqual(D_536166591,353358909),equals(isDefined(D_970325871,-1),-1)),greaterThan(age,69))", + "(exists(\"D_185168695\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_420155119\",804785430)) and (valueOrDefault(\"D_185168695\",69)>=70 or valueOrDefault(\"age\",69)>=70))) or (allExist(\"D_185168695\",\"D_970325871\") and ((valueEquals(\"D_355689185\",132232896) and valueEquals(\"D_536166591\",353358909)) and (valueOrDefault(\"D_185168695\",69)>=70 or valueOrDefault(\"D_970325871\",69)>=70)))", + "greaterThanOrEqual(isDefined(D_185168695,-1),70)", + "lessThan(isDefined(D_185168695,-1),70)", + "equals(D_447720598,549079588)", + "equals(D_447720598,896953195)", + "equals(D_447720598,889023234)", + "equals(D_447720598,181769837)", + "valueEquals(\"D_429228540\",132232896) and valueLength(\"D_141874857\")>=1 and valueEquals(\"D_338467033\",353358909)", + "equals(D_407056417,536341288)", + "equals(D_407056417,654207589)", + "valueEquals(\"D_429228540\",132232896) and exists(\"D_141874857\") and (valueEquals(\"D_338467033\",353358909) or (valueEquals(\"D_338467033\",104430631) and exists(\"D_480426504\")))", + "valueEquals(\"D_429228540\",132232896) and ((exists(\"D_141874857\") and valueEquals(\"D_338467033\",353358909)) or (valueEquals(\"D_338467033\",104430631) and exists(\"D_480426504\")))", + "doesNotEqual(isDefined(D_141874857,-1),-1)", + "equals(isDefined(D_141874857,-1),-1)", + "doesNotExist(\"D_480426504\")", + "exists(\"D_480426504\")", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D0%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D17", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D18%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D24", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D25%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D29", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D30%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D39", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D40%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D49", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D50%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D59", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D60%20and%20valueOrDefault(%22D_141874857%22%2C%22D_250456537%22)%3C%3D69", + "valueOrDefault(%22D_480426504%22%2C%22age%22)%3E%3D70", + "someSelected(\"D_294629316_1\",\"D_294629316_2\",\"D_294629316_3\",\"D_294629316_4\",\"D_294629316_5\",\"D_294629316_6\",\"D_294629316_7\",\"D_294629316_8\",\"D_164707243_1\",\"D_164707243_2\",\"D_164707243_3\",\"D_164707243_4\",\"D_164707243_5\",\"D_164707243_6\",\"D_164707243_7\",\"D_164707243_8\",\"D_771426895_1\",\"D_771426895_2\",\"D_771426895_3\",\"D_771426895_4\",\"D_771426895_5\",\"D_771426895_6\",\"D_771426895_7\",\"D_771426895_8\",\"D_818310825_1\",\"D_818310825_2\",\"D_818310825_3\",\"D_818310825_4\",\"D_818310825_5\",\"D_818310825_6\",\"D_818310825_7\",\"D_818310825_8\",\"D_843593800_1\",\"D_843593800_2\",\"D_843593800_3\",\"D_843593800_4\",\"D_843593800_5\",\"D_843593800_6\",\"D_843593800_7\",\"D_843593800_8\",\"D_175385712_1\",\"D_175385712_2\",\"D_175385712_3\",\"D_175385712_4\",\"D_175385712_5\",\"D_175385712_6\",\"D_175385712_7\",\"D_175385712_8\",\"D_772143730_1\",\"D_772143730_2\",\"D_772143730_3\",\"D_772143730_4\",\"D_772143730_5\",\"D_772143730_6\",\"D_772143730_7\",\"D_772143730_8\",\"D_602102163_1\",\"D_602102163_2\",\"D_602102163_3\",\"D_602102163_4\",\"D_602102163_5\",\"D_602102163_6\",\"D_602102163_7\",\"D_602102163_8\")", + "someSelected(%22D_294629316_1%22%2C%22D_294629316_2%22%2C%22D_294629316_3%22%2C%22D_294629316_4%22%2C%22D_294629316_5%22%2C%22D_294629316_6%22%2C%22D_294629316_7%22%2C%22D_294629316_8%22)", + "someSelected(%22D_164707243_1%22%2C%22D_164707243_2%22%2C%22D_164707243_3%22%2C%22D_164707243_4%22%2C%22D_164707243_5%22%2C%22D_164707243_6%22%2C%22D_164707243_7%22%2C%22D_164707243_8%22)", + "someSelected(%22D_771426895_1%22%2C%22D_771426895_2%22%2C%22D_771426895_3%22%2C%22D_771426895_4%22%2C%22D_771426895_5%22%2C%22D_771426895_6%22%2C%22D_771426895_7%22%2C%22D_771426895_8%22)", + "someSelected(%22D_818310825_1%22%2C%22D_818310825_2%22%2C%22D_818310825_3%22%2C%22D_818310825_4%22%2C%22D_818310825_5%22%2C%22D_818310825_6%22%2C%22D_818310825_7%22%2C%22D_818310825_8%22)", + "someSelected(%22D_843593800_1%22%2C%22D_843593800_2%22%2C%22D_843593800_3%22%2C%22D_843593800_4%22%2C%22D_843593800_5%22%2C%22D_843593800_6%22%2C%22D_843593800_7%22%2C%22D_843593800_8%22)", + "someSelected(%22D_175385712_1%22%2C%22D_175385712_2%22%2C%22D_175385712_3%22%2C%22D_175385712_4%22%2C%22D_175385712_5%22%2C%22D_175385712_6%22%2C%22D_175385712_7%22%2C%22D_175385712_8%22)", + "someSelected(%22D_772143730_1%22%2C%22D_772143730_2%22%2C%22D_772143730_3%22%2C%22D_772143730_4%22%2C%22D_772143730_5%22%2C%22D_772143730_6%22%2C%22D_772143730_7%22%2C%22D_772143730_8%22)", + "someSelected(%22D_602102163_1%22%2C%22D_602102163_2%22%2C%22D_602102163_3%22%2C%22D_602102163_4%22%2C%22D_602102163_5%22%2C%22D_602102163_6%22%2C%22D_602102163_7%22%2C%22D_602102163_8%22)", + "equals(equals(D_605063358,353358909),false)", + "equals(D_605063358,353358909)" + ], + "sitesByScope": { + "grid-inline": 8, + "grid-row": 23, + "inline": 556, + "question": 265 + }, + "sitesByAttribute": { + "data-displayif": 23, + "displayif": 829 + } + }, + "grids": [ + { + "questionId": "D_738219521", + "questionIndex": 142, + "rowQuestionIds": [ + "D_666840938", + "D_575237218", + "D_976863738", + "D_392301875", + "D_576358766", + "D_767711152", + "D_888898065", + "D_509170471" + ], + "rowCount": 8, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "162693263", + "924926068", + "417208949", + "797736697", + "480609810", + "485011582", + "865134801", + "667010122", + "648960871" + ] + }, + { + "questionId": "D_252017075", + "questionIndex": 143, + "rowQuestionIds": [ + "D_359443374", + "D_257564920", + "D_670036093", + "D_106272739" + ], + "rowCount": 4, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "503218834", + "759356722", + "668407984", + "448069154", + "485163252", + "160036380" + ] + }, + { + "questionId": "D_633553324", + "questionIndex": 281, + "rowQuestionIds": [ + "D_294629316", + "D_164707243", + "D_771426895", + "D_818310825", + "D_843593800", + "D_175385712", + "D_772143730", + "D_602102163" + ], + "rowCount": 8, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "265550580", + "950039557", + "402048066", + "522395860", + "756073829", + "858624942", + "424768954", + "687445652", + "333682419" + ] + }, + { + "questionId": "D_470862706", + "questionIndex": 282, + "rowQuestionIds": [ + "D_912659087", + "D_643512687", + "D_688123102", + "D_356133766", + "D_690918725", + "D_178609656", + "D_261957180", + "D_715827646" + ], + "rowCount": 8, + "responseTypes": [ + "checkbox" + ], + "responseValues": [ + "789689151", + "663253668", + "104676242", + "137733407" + ] + } + ], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 314, + "processorQuestionCount": 305, + "processedQuestionCount": 305, + "renderedFormCount": 305, + "controlCount": 2017, + "responseControlCount": 1047, + "explicitTransitionCount": 254, + "sequentialAdjacencyCount": 304, + "resolvedExplicitTransitionCount": 254, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 852, + "gridQuestionCount": 4, + "gridRowCount": 28, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 651 + } + }, + { + "schemaVersion": 1, + "module": "module4", + "locale": "en", + "language": "en", + "path": "prod/module4.txt", + "sha256": "008faf8420a7a657692c7e04a3615f171c53f675411fd3fd049f329a62124fe4", + "questName": "D_716117817", + "version": "2.0", + "authoredMarkerCount": 367, + "runtimeQuestionIds": [ + "INTROM4", + "INTRORH", + "D_121490150?", + "D_920576363?", + "D_804504024?", + "HOMEADD4_1", + "D_290969423?", + "D_869829679?", + "D_574985342?", + "D_444145120?", + "D_398762737?", + "HOMEADD4_2", + "D_862052821?", + "D_845483079?", + "D_828086036?", + "D_752101258?", + "D_961572487?", + "HOMEADD4_3", + "D_593146348?", + "D_736086261?", + "D_680046149?", + "D_879180101?", + "D_746604821?", + "HOMEADD4_4", + "D_983592172?", + "D_294308065?", + "D_274189667?", + "D_212343294?", + "D_298296694?", + "HOMEADD4_5", + "D_776406200?", + "D_385583361?", + "D_113930886?", + "D_255474241?", + "D_205492848?", + "HOMEADD4_6", + "D_135207939?", + "D_768802173?", + "D_809728747?", + "D_201906316?", + "D_581231591?", + "HOMEADD4_7", + "D_647612167?", + "D_150560299?", + "D_539057792?", + "D_864213677?", + "D_123104885?", + "HOMEADD4_8", + "D_532944666?", + "D_122054737?", + "D_537011756?", + "D_964853797?", + "D_890661849?", + "HOMEADD4_9", + "D_548863580?", + "D_948492967?", + "D_171937884?", + "D_787064287?", + "D_902193418?", + "HOMEADD4_10", + "D_124320444?", + "D_805353966?", + "D_828766803?", + "D_878688378?", + "D_440597740?", + "HOMEADD4_11", + "HOMEADDSUM_11", + "D_590222838?", + "D_728155643?", + "D_623452399?", + "D_380621340?", + "D_876443676?", + "D_999694720?", + "D_270587543?", + "D_849066624?", + "D_195167143?", + "D_425315696?", + "D_495330716?", + "D_529608184?", + "D_783797179?", + "D_234731641?", + "D_243695994?", + "D_664561394?", + "D_562190570?", + "D_450154625?", + "D_790359238?", + "D_812161236?", + "D_925747671?", + "D_964437163?", + "INTROHOMEWTR", + "D_958419506?", + "D_725408440?", + "D_539909957?", + "D_505863509?", + "D_651233069?", + "D_250486386?", + "D_957717014?", + "D_809387606?", + "D_726654963?", + "D_195367894?", + "D_428044531?", + "D_934184033?", + "D_986989731?", + "D_441498892?", + "D_508187475?", + "D_665978055?", + "D_113557709?", + "D_933017499?", + "D_386487941?", + "D_268661616?", + "D_494698740?", + "D_211740798?", + "D_318621931?", + "D_542086156?", + "D_190307069?", + "D_697751634?", + "D_740535024?", + "D_154170916?", + "D_277745320?", + "D_825109070?", + "D_337574535?", + "D_535386940?", + "D_927932321?", + "INTROSH", + "D_342677547?", + "D_710449106?", + "D_376408004?", + "D_173413183?", + "D_200086909?", + "SEASADD4_1", + "D_576956950?", + "D_512143997?", + "D_279093430?", + "D_657986901?", + "D_509526051?", + "SEASADD4_2", + "D_463952618?", + "D_982650994?", + "D_143927994?", + "D_564684946?", + "D_370121390?", + "SEASADD4_3", + "D_959488634?", + "D_945794974?", + "D_935378391?", + "D_558981691?", + "D_192184336?", + "SEASADD4_4", + "D_696017690?", + "D_663869343?", + "D_320166033?", + "D_194944818?", + "D_763354979?", + "SEASADD4_5", + "D_424272506?", + "D_275978701?", + "D_383535171?", + "D_508587741?", + "D_355179190?", + "SEASADD4_6", + "D_484550481?", + "D_195803565?", + "D_133566757?", + "D_293954660?", + "D_851731394?", + "SEASADD4_7", + "D_773680071?", + "D_282326355?", + "D_509553290?", + "D_268612977?", + "D_172669345?", + "SEASADD4_8", + "D_348817644?", + "D_141249692?", + "D_239279719?", + "D_216096388?", + "D_921998144?", + "SEASADD4_9", + "D_800194290?", + "D_494968690?", + "D_778711683?", + "D_757983656?", + "D_670316988?", + "SEASADD4_10", + "SEASADDSUM_10", + "D_379754686?", + "D_975198123?", + "D_860269869?", + "D_963795928?", + "D_778495585?", + "D_928112898?", + "D_775038507?", + "D_829751791?", + "D_412195193?", + "D_778721228?", + "D_914325712?", + "D_750000285?", + "D_504158362?", + "D_682457230?", + "D_849979952?", + "D_696972918?", + "D_404118353?", + "D_552298163?", + "D_921090200?", + "D_806530984?", + "D_710443293?", + "D_134624195?", + "D_613251957?", + "D_878144094?", + "D_274396191?", + "D_437395872?", + "D_709755471?", + "D_940513931?", + "D_288109261?", + "D_701803756?", + "INTROSEASWTR", + "D_426743354?", + "D_809682067?", + "D_598478268?", + "D_170035952?", + "D_734596352?", + "D_823509509?", + "D_771505558?", + "D_524305502?", + "D_149476435?", + "D_105941645?", + "D_120942783?", + "D_719647239?", + "D_322665488?", + "D_167987013?", + "D_953722451?", + "D_118738120?", + "D_340877879?", + "D_541565665?", + "D_728256340?", + "D_976597527?", + "D_274257975?", + "D_603945794?", + "D_277312204?", + "D_636020848?", + "D_304685106?", + "D_201989756?", + "D_296694684?", + "D_274780951?", + "D_491337167?", + "D_321932473?", + "INTROCH", + "D_277348878?", + "D_720221117?", + "D_632533534?", + "D_264797252?", + "D_469914719?", + "CHILDADD4", + "D_191221569?", + "D_752015272?", + "D_714365367?", + "D_665593888?", + "TAPWTRINTRO", + "D_285545471?", + "D_831438612?", + "D_961178879?", + "D_138116092?", + "D_393682471?", + "D_364303962?", + "D_944517297?", + "D_302947409?", + "COMINTRO", + "INTROWORKPOSTPAN", + "D_699873889?", + "D_213152981?", + "D_858178137?", + "D_871276836?", + "D_660218333?", + "D_263959391?", + "D_986316055?", + "D_116032363?", + "CURWORKPOSTPANCONFIRM", + "D_870675371?", + "D_788065155?", + "D_421586693?", + "D_733638576?", + "D_166943843?", + "D_173155090?", + "D_234136107?", + "D_666629067?", + "D_614208066?", + "D_308634850?", + "D_799598595?", + "D_532260562?", + "D_242268237?", + "D_568581510?", + "D_277953784?", + "D_510872569?", + "INTROCURWORK", + "D_694113343?", + "D_576417612?", + "D_374639590?", + "INTROPREPANDIFF_INTROPREWORK_SKIP", + "INTROPREPANDIFF_SKIP", + "INTROPREPANDIFF", + "D_970148613?", + "D_774087638?", + "D_635780118?", + "D_828801156?", + "D_211472150?", + "D_596318751?", + "D_263588196?", + "D_845811202?", + "CURWORKCONFIRM", + "D_380579855?", + "D_138397553?", + "D_635467479?", + "D_440093675?", + "D_155199731?", + "D_181422361?", + "D_333362587?", + "D_839454121?", + "D_684542266?", + "D_203943120?", + "D_404697804?", + "D_786253125?", + "D_186636914?", + "D_936393993?", + "D_168563469?", + "D_219893040?", + "INTROPREWORK_SKIP", + "INTROPREWORK", + "D_995620555?", + "D_980007418?", + "D_992180692?", + "D_350394531?", + "D_733317111?", + "PREWORKCONFIRM", + "D_569375463?", + "D_822005593?", + "D_311891586?", + "D_968388901?", + "D_335218615?", + "D_564557026?", + "D_839233937?", + "D_251048648?", + "D_679430807?", + "D_475144270?", + "INTROCURSCH", + "D_449752653?", + "D_959371875?", + "D_914696832?", + "D_668887646?", + "D_443679537?", + "CURSCHCONFIRM", + "D_224209278?", + "D_659744749?", + "D_404863614?", + "D_135529881?", + "D_136660779?", + "D_107050954?", + "D_559488982?", + "D_940631293?", + "D_496801729?", + "D_230528407?", + "D_345355061?", + "D_219317801?", + "D_705673076?", + "D_333852852?", + "D_776580384?", + "D_849811593?", + "END" + ], + "responseControlsByType": { + "checkbox": 156, + "number": 72, + "radio": 1054, + "text": 395 + }, + "explicitTransitions": { + "targets": [ + "D_574985342", + "D_590222838", + "D_828086036", + "D_680046149", + "D_274189667", + "D_113930886", + "D_809728747", + "D_539057792", + "D_537011756", + "D_171937884", + "D_828766803", + "D_539909957", + "D_725408440", + "D_250486386", + "D_651233069", + "D_726654963", + "D_809387606", + "D_934184033", + "D_428044531", + "D_508187475", + "D_441498892", + "D_933017499", + "D_113557709", + "D_494698740", + "D_268661616", + "D_542086156", + "D_318621931", + "D_740535024", + "D_697751634", + "D_825109070", + "D_277745320", + "D_927932321", + "D_535386940", + "INTROSH", + "D_376408004", + "D_710449106", + "INTROCH", + "D_279093430", + "D_379754686", + "D_143927994", + "D_935378391", + "D_320166033", + "D_383535171", + "D_133566757", + "D_509553290", + "D_239279719", + "D_778711683", + "D_598478268", + "D_809682067", + "D_823509509", + "D_734596352", + "D_149476435", + "D_524305502", + "D_719647239", + "D_120942783", + "D_953722451", + "D_167987013", + "D_541565665", + "D_340877879", + "D_274257975", + "D_976597527", + "D_636020848", + "D_277312204", + "D_296694684", + "D_201989756", + "D_321932473", + "D_491337167", + "D_720221117", + "D_632533534", + "CHILDADD4", + "D_302947409", + "INTROCURWORK", + "D_666629067", + "D_799598595", + "D_510872569", + "D_532260562", + "INTROPREWORK_SKIP", + "INTROPREPANDIFF_INTROPREWORK_SKIP", + "D_774087638", + "INTROCURSCH", + "D_635467479", + "D_839454121", + "D_404697804", + "D_219893040", + "D_786253125", + "D_980007418", + "D_992180692", + "D_335218615", + "D_839233937", + "D_251048648", + "D_475144270", + "D_679430807", + "END", + "D_940631293", + "D_345355061", + "D_849811593", + "D_219317801" + ], + "byKind": { + "default": 6, + "no-response": 76, + "response": 177 + }, + "byResolution": { + "exact": 256, + "terminal": 3 + }, + "triggerTypes": { + "hidden": 82, + "radio": 177 + }, + "triggerValues": [ + "353358909", + "580377720", + "901693169", + "519767819", + "388690303", + "807835037", + "178420302", + "104430631", + "614395648", + "991158851", + "778052314", + "751569137", + "684900118", + "816566846" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "or(or(isNotDefined(D_303500597,false),isNotDefined(D_195068098,false)),or(isNotDefined(D_202784871,false),isNotDefined(D_831127170,false)))", + "exists('D_303500597')", + "doesNotExist(\"D_303500597\")", + "exists('D_195068098')", + "doesNotExist(\"D_195068098\")", + "exists('D_202784871')", + "doesNotExist(\"D_202784871\")", + "exists('D_831127170')", + "doesNotExist(\"D_831127170\")", + "noneExist(\"D_255248624\",\"D_945532934\") and someExist(\"D_725583683\",\"D_917021073\",\"D_970000442\",\"D_500100435\",\"D_303500597\",\"D_195068098\",\"D_202784871\",\"D_831127170\")", + "noneExist('D_255248624','D_945532934','D_469838242','D_303500597','D_725583683','D_195068098','D_917021073','D_202784871','D_970000442','D_831127170','D_500100435')", + "someExist('D_255248624','D_945532934','D_469838242','D_303500597','D_725583683','D_195068098','D_917021073','D_202784871','D_970000442','D_831127170','D_500100435')", + "or(or(isNotDefined(D_536516743,false),isNotDefined(D_283900560,false)),or(isNotDefined(D_467947502,false),isNotDefined(D_368486703,false)))", + "exists('D_536516743')", + "doesNotExist(\"D_536516743\")", + "exists('D_283900560')", + "doesNotExist(\"D_283900560\")", + "exists('D_467947502')", + "doesNotExist(\"D_467947502\")", + "exists('D_368486703')", + "doesNotExist(\"D_368486703\")", + "displayif=noneExist(\"D_985267931\",\"D_111275683\") and someExist(\"D_288498031\",\"D_195845897\",\"D_936129960\",\"D_924583345\",\"D_536516743\",\"D_283900560\",\"D_467947502\",\"D_368486703\")", + "noneExist('D_985267931','D_111275683','D_129226572','D_536516743','D_288498031','D_283900560','D_195845897','D_467947502','D_936129960','D_368486703','D_924583345')", + "someExist('D_985267931','D_111275683','D_129226572','D_536516743','D_288498031','D_283900560','D_195845897','D_467947502','D_936129960','D_368486703','D_924583345')", + "or(or(isNotDefined(D_588699608,false),isNotDefined(D_544692849,false)),or(isNotDefined(D_335435992,false),isNotDefined(D_337088272,false)))", + "exists('D_588699608')", + "doesNotExist(\"D_588699608\")", + "exists('D_544692849')", + "doesNotExist(\"D_544692849\")", + "exists('D_335435992')", + "doesNotExist(\"D_335435992\")", + "exists('D_337088272')", + "doesNotExist(\"D_337088272\")", + "noneExist(\"D_875706715\",\"D_645150792\") and someExist(\"D_648495207\",\"D_300933270\",\"D_649864362\",\"D_723108194\",\"D_588699608\",\"D_544692849\",\"D_335435992\",\"D_337088272\")", + "noneExist('D_875706715','D_645150792','D_585360350','D_588699608','D_648495207','D_544692849','D_300933270','D_335435992','D_649864362','D_337088272','D_723108194')", + "someExist('D_875706715','D_645150792','D_585360350','D_588699608','D_648495207','D_544692849','D_300933270','D_335435992','D_649864362','D_337088272','D_723108194')", + "or(or(isNotDefined(D_930511603,false),isNotDefined(D_756548442,false)),or(isNotDefined(D_455968200,false),isNotDefined(D_728704613,false)))", + "exists('D_930511603')", + "doesNotExist(\"D_930511603\")", + "exists('D_756548442')", + "doesNotExist(\"D_756548442\")", + "exists('D_455968200')", + "doesNotExist(\"D_455968200\")", + "exists('D_728704613')", + "doesNotExist(\"D_728704613\")", + "noneExist(\"D_130174162\",\"D_563832508\") and someExist(\"D_931999203\",\"D_486511102\",\"D_267027102\",\"D_734345879\",\"D_930511603\",\"D_756548442\",\"D_455968200\",\"D_728704613\")", + "noneExist('D_130174162','D_563832508','D_817839081','D_930511603','D_931999203','D_756548442','D_486511102','D_455968200','D_267027102','D_728704613','D_734345879')", + "someExist('D_130174162','D_563832508','D_817839081','D_930511603','D_931999203','D_756548442','D_486511102','D_455968200','D_267027102','D_728704613','D_734345879')", + "or(or(isNotDefined(D_742177990,false),isNotDefined(D_843508307,false)),or(isNotDefined(D_554901696,false),isNotDefined(D_819429013,false)))", + "exists('D_742177990')", + "doesNotExist(\"D_742177990\")", + "exists('D_843508307')", + "doesNotExist(\"D_843508307\")", + "exists('D_554901696')", + "doesNotExist(\"D_554901696\")", + "exists('D_819429013')", + "doesNotExist(\"D_819429013\")", + "noneExist(\"D_838725845\",\"D_565515774\") and someExist(\"D_445867902\",\"D_348049244\",\"D_684217044\",\"D_600319581\",\"D_742177990\",\"D_843508307\",\"D_554901696\",\"D_819429013\")", + "noneExist('D_838725845','D_565515774','D_848348504','D_742177990','D_445867902','D_843508307','D_348049244','D_554901696','D_684217044','D_819429013','D_600319581')", + "someExist('D_838725845','D_565515774','D_848348504','D_742177990','D_445867902','D_843508307','D_348049244','D_554901696','D_684217044','D_819429013','D_600319581')", + "or(or(isNotDefined(D_418702418,false),isNotDefined(D_101219440,false)),or(isNotDefined(D_127963610,false),isNotDefined(D_882731998,false)))", + "exists('D_418702418')", + "doesNotExist(\"D_418702418\")", + "exists('D_101219440')", + "doesNotExist(\"D_101219440\")", + "exists('D_127963610')", + "doesNotExist(\"D_127963610\")", + "exists('D_882731998')", + "doesNotExist(\"D_882731998\")", + "displayif=noneExist(\"D_306805272\",\"D_819844467\") and someExist(\"D_218334768\",\"D_394294282\",\"D_803526907\",\"D_941168091\",\"D_418702418\",\"D_101219440\",\"D_127963610\",\"D_882731998\")", + "noneExist('D_306805272','D_819844467','D_164233037','D_418702418','D_218334768','D_101219440','D_394294282','D_127963610','D_803526907','D_882731998','D_941168091')", + "someExist('D_306805272','D_819844467','D_164233037','D_418702418','D_218334768','D_101219440','D_394294282','D_127963610','D_803526907','D_882731998','D_941168091')", + "or(or(isNotDefined(D_703944664,false),isNotDefined(D_390463636,false)),or(isNotDefined(D_256790385,false),isNotDefined(D_915222355,false)))", + "exists('D_703944664')", + "doesNotExist(\"D_703944664\")", + "exists('D_390463636')", + "doesNotExist(\"D_390463636\")", + "exists('D_256790385')", + "doesNotExist(\"D_256790385\")", + "exists('D_915222355')", + "doesNotExist(\"D_915222355\")", + "noneExist(\"D_351559015\",\"D_903490632\") and someExist(\"D_476697171\",\"D_605344820\",\"D_814644814\",\"D_627992821\",\"D_703944664\",\"D_390463636\",\"D_256790385\",\"D_915222355\")", + "noneExist('D_351559015','D_903490632','D_906119853','D_703944664','D_476697171','D_390463636','D_605344820','D_256790385','D_814644814','D_915222355','D_627992821')", + "someExist('D_351559015','D_903490632','D_906119853','D_703944664','D_476697171','D_390463636','D_605344820','D_256790385','D_814644814','D_915222355','D_627992821')", + "or(or(isNotDefined(D_744290061,false),isNotDefined(D_516936572,false)),or(isNotDefined(D_673034401,false),isNotDefined(D_489019597,false)))", + "exists('D_744290061')", + "doesNotExist(\"D_744290061\")", + "exists('D_516936572')", + "doesNotExist(\"D_516936572\")", + "exists('D_673034401')", + "doesNotExist(\"D_673034401\")", + "exists('D_489019597')", + "doesNotExist(\"D_489019597\")", + "noneExist(\"D_893639464\",\"D_438475588\") and someExist(\"D_280877371\",\"D_463064782\",\"D_865310914\",\"D_900377581\",\"D_744290061\",\"D_516936572\",\"D_673034401\",\"D_489019597\")", + "noneExist('D_893639464','D_438475588','D_194165243','D_744290061','D_280877371','D_516936572','D_463064782','D_673034401','D_865310914','D_489019597','D_900377581')", + "someExist('D_893639464','D_438475588','D_194165243','D_744290061','D_280877371','D_516936572','D_463064782','D_673034401','D_865310914','D_489019597','D_900377581')", + "or(or(isNotDefined(D_351559021,false),isNotDefined(D_290370013,false)),or(isNotDefined(D_453691095,false),isNotDefined(D_202104231,false)))", + "exists('D_351559021')", + "doesNotExist(\"D_351559021\")", + "exists('D_290370013')", + "doesNotExist(\"D_290370013\")", + "exists('D_453691095')", + "doesNotExist(\"D_453691095\")", + "exists('D_202104231')", + "doesNotExist(\"D_202104231\")", + "noneExist(\"D_988266183\",\"D_709374950\") and someExist(\"D_548773158\",\"D_487043303\",\"D_659122266\",\"D_388427546\",\"D_351559021\",\"D_290370013\",\"D_453691095\",\"D_202104231\")", + "noneExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546')", + "someExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546')", + "or(or(isNotDefined(D_282089547,false),isNotDefined(D_612617245,false)),or(isNotDefined(D_674024553,false),isNotDefined(D_886247195,false)))", + "exists('D_282089547')", + "doesNotExist(\"D_282089547\")", + "exists('D_612617245')", + "doesNotExist(\"D_612617245\")", + "exists('D_674024553')", + "doesNotExist(\"D_674024553\")", + "exists('D_886247195')", + "doesNotExist(\"D_886247195\")", + "noneExist(\"D_264707783\",\"D_666011940\") and someExist(\"D_891573875\",\"D_862255177\",\"D_972332937\",\"D_429200007\",\"D_282089547\",\"D_612617245\",\"D_674024553\",\"D_886247195\")", + "noneExist('D_264707783','D_666011940','D_981594981','D_282089547','D_891573875','D_612617245','D_862255177','D_674024553','D_972332937','D_886247195','D_429200007')", + "someExist('D_264707783','D_666011940','D_981594981','D_282089547','D_891573875','D_612617245','D_862255177','D_674024553','D_972332937','D_886247195','D_429200007')", + "or(or(isNotDefined(D_309461541,false),isNotDefined(D_789637860,false)),or(isNotDefined(D_795253129,false),isNotDefined(D_780298998,false)))", + "exists('D_309461541')", + "doesNotExist(\"D_309461541\")", + "exists('D_789637860')", + "doesNotExist(\"D_789637860\")", + "exists('D_795253129')", + "doesNotExist(\"D_795253129\")", + "exists('D_780298998')", + "doesNotExist(\"D_780298998\")", + "noneExist(\"D_622968789\",\"D_696874548\") and someExist(\"D_706592013\",\"D_585473282\",\"D_814137809\",\"D_876521406\",\"D_309461541\",\"D_789637860\",\"D_795253129\",\"D_780298998\")", + "noneExist('D_622968789','D_696874548','D_450630128','D_309461541','D_706592013','D_789637860','D_585473282','D_795253129','D_814137809','D_780298998','D_876521406')", + "someExist('D_622968789','D_696874548','D_450630128','D_309461541','D_706592013','D_789637860','D_585473282','D_795253129','D_814137809','D_780298998','D_876521406')", + "or(equals(D_290969423,353358909),or(equals(D_869829679,270752953),or(equals(isNotDefined(D_985267931,\"\"),false),or(equals(isNotDefined(D_111275683,\"\"),false),or(equals(isNotDefined(D_129226572,\"\"),false),or(equals(isNotDefined(D_536516743,\"\"),false),or(equals(isNotDefined(D_288498031,\"\"),false),or(equals(isNotDefined(D_283900560,\"\"),false),or(equals(isNotDefined(D_195845897,\"\"),false),or(equals(isNotDefined(D_467947502,\"\"),false),or(equals(isNotDefined(D_936129960,\"\"),false),or(equals(isNotDefined(D_368486703,\"\"),false),equals(isNotDefined(D_924583345,\"\"),false)))))))))))))", + "or(equals(D_862052821,353358909),or(equals(D_845483079,270752953),or(equals(isNotDefined(D_875706715,\"\"),false),or(equals(isNotDefined(D_645150792,\"\"),false),or(equals(isNotDefined(D_585360350,\"\"),false),or(equals(isNotDefined(D_588699608,\"\"),false),or(equals(isNotDefined(D_648495207,\"\"),false),or(equals(isNotDefined(D_544692849,\"\"),false),or(equals(isNotDefined(D_300933270,\"\"),false),or(equals(isNotDefined(D_335435992,\"\"),false),or(equals(isNotDefined(D_649864362,\"\"),false),or(equals(isNotDefined(D_337088272,\"\"),false),equals(isNotDefined(D_723108194,\"\"),false)))))))))))))", + "or(equals(D_593146348,353358909),or(equals(D_736086261,270752953),or(equals(isNotDefined(D_130174162,\"\"),false),or(equals(isNotDefined(D_563832508,\"\"),false),or(equals(isNotDefined(D_817839081,\"\"),false),or(equals(isNotDefined(D_930511603,\"\"),false),or(equals(isNotDefined(D_931999203,\"\"),false),or(equals(isNotDefined(D_756548442,\"\"),false),or(equals(isNotDefined(D_486511102,\"\"),false),or(equals(isNotDefined(D_455968200,\"\"),false),or(equals(isNotDefined(D_267027102,\"\"),false),or(equals(isNotDefined(D_728704613,\"\"),false),equals(isNotDefined(D_734345879,\"\"),false)))))))))))))", + "or(equals(D_983592172,353358909),or(equals(D_294308065,270752953),or(equals(isNotDefined(D_838725845,\"\"),false),or(equals(isNotDefined(D_565515774,\"\"),false),or(equals(isNotDefined(D_848348504,\"\"),false),or(equals(isNotDefined(D_742177990,\"\"),false),or(equals(isNotDefined(D_445867902,\"\"),false),or(equals(isNotDefined(D_843508307,\"\"),false),or(equals(isNotDefined(D_348049244,\"\"),false),or(equals(isNotDefined(D_554901696,\"\"),false),or(equals(isNotDefined(D_684217044,\"\"),false),or(equals(isNotDefined(D_819429013,\"\"),false),equals(isNotDefined(D_600319581,\"\"),false)))))))))))))", + "or(equals(D_776406200,353358909),or(equals(D_385583361,270752953),or(equals(isNotDefined(D_306805272,\"\"),false),or(equals(isNotDefined(D_819844467,\"\"),false),or(equals(isNotDefined(D_164233037,\"\"),false),or(equals(isNotDefined(D_418702418,\"\"),false),or(equals(isNotDefined(D_218334768,\"\"),false),or(equals(isNotDefined(D_101219440,\"\"),false),or(equals(isNotDefined(D_394294282,\"\"),false),or(equals(isNotDefined(D_127963610,\"\"),false),or(equals(isNotDefined(D_803526907,\"\"),false),or(equals(isNotDefined(D_882731998,\"\"),false),equals(isNotDefined(D_941168091,\"\"),false)))))))))))))", + "or(equals(D_135207939,353358909),or(equals(D_768802173,270752953),or(equals(isNotDefined(D_351559015,\"\"),false),or(equals(isNotDefined(D_903490632,\"\"),false),or(equals(isNotDefined(D_906119853,\"\"),false),or(equals(isNotDefined(D_703944664,\"\"),false),or(equals(isNotDefined(D_476697171,\"\"),false),or(equals(isNotDefined(D_390463636,\"\"),false),or(equals(isNotDefined(D_605344820,\"\"),false),or(equals(isNotDefined(D_256790385,\"\"),false),or(equals(isNotDefined(D_814644814,\"\"),false),or(equals(isNotDefined(D_915222355,\"\"),false),equals(isNotDefined(D_627992821,\"\"),false)))))))))))))", + "or(equals(D_647612167,353358909),or(equals(D_150560299,270752953),or(equals(isNotDefined(D_893639464,\"\"),false),or(equals(isNotDefined(D_438475588,\"\"),false),or(equals(isNotDefined(D_194165243,\"\"),false),or(equals(isNotDefined(D_744290061,\"\"),false),or(equals(isNotDefined(D_280877371,\"\"),false),or(equals(isNotDefined(D_516936572,\"\"),false),or(equals(isNotDefined(D_463064782,\"\"),false),or(equals(isNotDefined(D_673034401,\"\"),false),or(equals(isNotDefined(D_865310914,\"\"),false),or(equals(isNotDefined(D_489019597,\"\"),false),equals(isNotDefined(D_900377581,\"\"),false)))))))))))))", + "or(equals(D_532944666,353358909),or(equals(D_122054737,270752953),or(equals(isNotDefined(D_988266183,\"\"),false),or(equals(isNotDefined(D_709374950,\"\"),false),or(equals(isNotDefined(D_853931010,\"\"),false),or(equals(isNotDefined(D_351559021,\"\"),false),or(equals(isNotDefined(D_548773158,\"\"),false),or(equals(isNotDefined(D_290370013,\"\"),false),or(equals(isNotDefined(D_487043303,\"\"),false),or(equals(isNotDefined(D_453691095,\"\"),false),or(equals(isNotDefined(D_659122266,\"\"),false),or(equals(isNotDefined(D_202104231,\"\"),false),equals(isNotDefined(D_388427546,\"\"),false)))))))))))))", + "or(equals(D_548863580,353358909),or(equals(D_948492967,270752953),or(equals(isNotDefined(D_264707783,\"\"),false),or(equals(isNotDefined(D_666011940,\"\"),false),or(equals(isNotDefined(D_981594981,\"\"),false),or(equals(isNotDefined(D_282089547,\"\"),false),or(equals(isNotDefined(D_891573875,\"\"),false),or(equals(isNotDefined(D_612617245,\"\"),false),or(equals(isNotDefined(D_862255177,\"\"),false),or(equals(isNotDefined(D_674024553,\"\"),false),or(equals(isNotDefined(D_972332937,\"\"),false),or(equals(isNotDefined(D_886247195,\"\"),false),equals(isNotDefined(D_429200007,\"\"),false)))))))))))))", + "or(equals(D_124320444,353358909),or(equals(D_805353966,270752953),or(equals(isNotDefined(D_622968789,\"\"),false),or(equals(isNotDefined(D_696874548,\"\"),false),or(equals(isNotDefined(D_450630128,\"\"),false),or(equals(isNotDefined(D_309461541,\"\"),false),or(equals(isNotDefined(D_706592013,\"\"),false),or(equals(isNotDefined(D_789637860,\"\"),false),or(equals(isNotDefined(D_585473282,\"\"),false),or(equals(isNotDefined(D_795253129,\"\"),false),or(equals(isNotDefined(D_814137809,\"\"),false),or(equals(isNotDefined(D_780298998,\"\"),false),equals(isNotDefined(D_876521406,\"\"),false)))))))))))))", + "or(or(isNotDefined(D_556576930,false),isNotDefined(D_304326324,false)),or(isNotDefined(D_812433386,false),isNotDefined(D_477319994,false)))", + "exists('D_556576930')", + "doesNotExist(\"D_556576930\")", + "exists('D_304326324')", + "doesNotExist(\"D_304326324\")", + "exists('D_812433386')", + "doesNotExist(\"D_812433386\")", + "exists('D_477319994')", + "doesNotExist(\"D_477319994\")", + "noneExist(\"D_234037089\",\"D_416862112\") and someExist(\"D_416620941\",\"D_915859406\",\"D_354833686\",\"D_661148931\",\"D_556576930\",\"D_304326324\",\"D_812433386\",\"D_477319994\")", + "noneExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_661148931')", + "someExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_661148931')", + "or(or(isNotDefined(D_715370929,false),isNotDefined(D_109991481,false)),or(isNotDefined(D_494380686,false),isNotDefined(D_440796912,false)))", + "exists('D_715370929')", + "doesNotExist(\"D_715370929\")", + "exists('D_109991481')", + "doesNotExist(\"D_109991481\")", + "exists('D_494380686')", + "doesNotExist(\"D_494380686\")", + "exists('D_440796912')", + "doesNotExist(\"D_440796912\")", + "noneExist(\"D_476938134\",\"D_561635035\") and someExist(\"D_726739712\",\"D_149514187\",\"D_845446624\",\"D_677739650\",\"D_715370929\",\"D_109991481\",\"D_494380686\",\"D_440796912\")", + "noneExist('D_476938134','D_561635035','D_134210521','D_715370929','D_726739712','D_109991481','D_149514187','D_494380686','D_845446624','D_440796912','D_677739650')", + "someExist('D_476938134','D_561635035','D_134210521','D_715370929','D_726739712','D_109991481','D_149514187','D_494380686','D_845446624','D_440796912','D_677739650')", + "or(or(isNotDefined(D_113352592,false),isNotDefined(D_768114466,false)),or(isNotDefined(D_938180781,false),isNotDefined(D_733365745,false)))", + "exists('D_113352592')", + "doesNotExist(\"D_113352592\")", + "exists('D_768114466')", + "doesNotExist(\"D_768114466\")", + "exists('D_938180781')", + "doesNotExist(\"D_938180781\")", + "exists('D_733365745')", + "doesNotExist(\"D_733365745\")", + "noneExist(\"D_119483547\",\"D_194338739\") and someExist(\"D_148846635\",\"D_192663941\",\"D_245044197\",\"D_261025083\",\"D_113352592\",\"D_768114466\",\"D_938180781\",\"D_733365745\")", + "noneExist('D_119483547','D_194338739','D_387077376','D_113352592','D_148846635','D_768114466','D_192663941','D_938180781','D_245044197','D_733365745','D_261025083')", + "someExist('D_119483547','D_194338739','D_387077376','D_113352592','D_148846635','D_768114466','D_192663941','D_938180781','D_245044197','D_733365745','D_261025083')", + "or(or(isNotDefined(D_733619119,false),isNotDefined(D_843680322,false)),or(isNotDefined(D_716343828,false),isNotDefined(D_497260033,false)))", + "exists('D_733619119')", + "doesNotExist(\"D_733619119\")", + "exists('D_843680322')", + "doesNotExist(\"D_843680322\")", + "exists('D_716343828')", + "doesNotExist(\"D_716343828\")", + "exists('D_497260033')", + "doesNotExist(\"D_497260033\")", + "noneExist(\"D_785588454\",\"D_419659205\") and someExist(\"D_571926996\",\"D_645589113\",\"D_701056236\",\"D_398249766\",\"D_733619119\",\"D_843680322\",\"D_716343828\",\"D_497260033\")", + "noneExist('D_785588454','D_419659205','D_653181757','D_733619119','D_571926996','D_843680322','D_645589113','D_716343828','D_701056236','D_497260033','D_398249766')", + "someExist('D_785588454','D_419659205','D_653181757','D_733619119','D_571926996','D_843680322','D_645589113','D_716343828','D_701056236','D_497260033','D_398249766')", + "or(or(isNotDefined(D_570311888,false),isNotDefined(D_557852952,false)),or(isNotDefined(D_970217879,false),isNotDefined(D_452103273,false)))", + "exists('D_570311888')", + "doesNotExist(\"D_570311888\")", + "exists('D_557852952')", + "doesNotExist(\"D_557852952\")", + "exists('D_970217879')", + "doesNotExist(\"D_970217879\")", + "exists('D_452103273')", + "doesNotExist(\"D_452103273\")", + "displayif=noneExist(\"D_275244758\",\"D_688216428\") and someExist(\"D_101804763\",\"D_502068619\",\"D_787391994\",\"D_540340377\",\"D_570311888\",\"D_557852952\",\"D_970217879\",\"D_452103273\")", + "noneExist('D_275244758','D_688216428','D_843674851','D_570311888','D_101804763','D_557852952','D_502068619','D_970217879','D_787391994','D_452103273','D_540340377')", + "someExist('D_275244758','D_688216428','D_843674851','D_570311888','D_101804763','D_557852952','D_502068619','D_970217879','D_787391994','D_452103273','D_540340377')", + "or(or(isNotDefined(D_888514303,false),isNotDefined(D_905002640,false)),or(isNotDefined(D_687407917,false),isNotDefined(D_932828568,false)))", + "exists('D_888514303')", + "doesNotExist(\"D_888514303\")", + "exists('D_905002640')", + "doesNotExist(\"D_905002640\")", + "exists('D_687407917')", + "doesNotExist(\"D_687407917\")", + "exists('D_932828568')", + "doesNotExist(\"D_932828568\")", + "noneExist(\"D_666445636\",\"D_398622449\") and someExist(\"D_686611963\",\"D_900950849\",\"D_103689435\",\"D_659457234\",\"D_888514303\",\"D_905002640\",\"D_687407917\",\"D_932828568\")", + "noneExist('D_666445636','D_398622449','D_521925072','D_888514303','D_686611963','D_905002640','D_900950849','D_687407917','D_103689435','D_932828568','D_659457234')", + "someExist('D_666445636','D_398622449','D_521925072','D_888514303','D_686611963','D_905002640','D_900950849','D_687407917','D_103689435','D_932828568','D_659457234')", + "or(or(isNotDefined(D_384403974,false),isNotDefined(D_585153023,false)),or(isNotDefined(D_248996395,false),isNotDefined(D_525778327,false)))", + "exists('D_384403974')", + "doesNotExist(\"D_384403974\")", + "exists('D_585153023')", + "doesNotExist(\"D_585153023\")", + "exists('D_248996395')", + "doesNotExist(\"D_248996395\")", + "exists('D_525778327')", + "doesNotExist(\"D_525778327\")", + "noneExist(\"D_199489170\",\"D_605155921\") and someExist(\"D_860984191\",\"D_892150843\",\"D_230376384\",\"D_526462982\",\"D_384403974\",\"D_585153023\",\"D_248996395\",\"D_525778327\")", + "noneExist('D_199489170','D_605155921','D_300476868','D_384403974','D_860984191','D_585153023','D_892150843','D_248996395','D_230376384','D_525778327','D_526462982')", + "someExist('D_199489170','D_605155921','D_300476868','D_384403974','D_860984191','D_585153023','D_892150843','D_248996395','D_230376384','D_525778327','D_526462982')", + "or(or(isNotDefined(D_367684056,false),isNotDefined(D_389478638,false)),or(isNotDefined(D_949478044,false),isNotDefined(D_298170847,false)))", + "exists('D_367684056')", + "doesNotExist(\"D_367684056\")", + "exists('D_389478638')", + "doesNotExist(\"D_389478638\")", + "exists('D_949478044')", + "doesNotExist(\"D_949478044\")", + "exists('D_298170847')", + "doesNotExist(\"D_298170847\")", + "noneExist(\"D_295693777\",\"D_646099557\") and someExist(\"D_599753334\",\"D_467126157\",\"D_421779583\",\"D_587765197\",\"D_367684056\",\"D_389478638\",\"D_949478044\",\"D_298170847\")", + "noneExist('D_295693777','D_646099557','D_886284650','D_367684056','D_599753334','D_389478638','D_467126157','D_949478044','D_421779583','D_298170847','D_587765197')", + "someExist('D_295693777','D_646099557','D_886284650','D_367684056','D_599753334','D_389478638','D_467126157','D_949478044','D_421779583','D_298170847','D_587765197')", + "or(or(isNotDefined(D_711881258,false),isNotDefined(D_390941579,false)),or(isNotDefined(D_737885885,false),isNotDefined(D_603853574,false)))", + "exists('D_711881258')", + "doesNotExist(\"D_711881258\")", + "exists('D_390941579')", + "doesNotExist(\"D_390941579\")", + "exists('D_737885885')", + "doesNotExist(\"D_737885885\")", + "exists('D_603853574')", + "doesNotExist(\"D_603853574\")", + "noneExist(\"D_143093472\",\"D_746619983\") and someExist(\"D_450433102\",\"D_181005197\",\"D_855530921\",\"D_589689090\",\"D_711881258\",\"D_390941579\",\"D_737885885\",\"D_603853574\")", + "noneExist('D_143093472','D_746619983','D_911964974','D_711881258','D_450433102','D_390941579','D_181005197','D_737885885','D_855530921','D_603853574','D_589689090')", + "someExist('D_143093472','D_746619983','D_911964974','D_711881258','D_450433102','D_390941579','D_181005197','D_737885885','D_855530921','D_603853574','D_589689090')", + "or(or(isNotDefined(D_160188014,false),isNotDefined(D_596751155,false)),or(isNotDefined(D_624226136,false),isNotDefined(D_807127029,false)))", + "exists('D_160188014')", + "doesNotExist(\"D_160188014\")", + "exists('D_596751155')", + "doesNotExist(\"D_596751155\")", + "exists('D_624226136')", + "doesNotExist(\"D_624226136\")", + "exists('D_807127029')", + "doesNotExist(\"D_807127029\")", + "noneExist(\"D_117703279\",\"D_734790700\") and someExist(\"D_983038259\",\"D_313586037\",\"D_158186064\",\"D_274940131\",\"D_160188014\",\"D_596751155\",\"D_624226136\",\"D_807127029\")", + "noneExist('D_117703279','D_734790700','D_278164536','D_160188014','D_983038259','D_596751155','D_313586037','D_624226136','D_158186064','D_807127029','D_274940131')", + "someExist('D_117703279','D_734790700','D_278164536','D_160188014','D_983038259','D_596751155','D_313586037','D_624226136','D_158186064','D_807127029','D_274940131')", + "or(equals(D_342677547,353358909),or(equals(D_710449106,991158851),or(equals(isNotDefined(D_234037089,\"\"),false),or(equals(isNotDefined(D_416862112,\"\"),false),or(equals(isNotDefined(D_671149035,\"\"),false),or(equals(isNotDefined(D_556576930,\"\"),false),or(equals(isNotDefined(D_416620941,\"\"),false),or(equals(isNotDefined(D_304326324,\"\"),false),or(equals(isNotDefined(D_915859406,\"\"),false),or(equals(isNotDefined(D_812433386,\"\"),false),or(equals(isNotDefined(D_354833686,\"\"),false),or(equals(isNotDefined(D_477319994,\"\"),false),equals(isNotDefined(D_661148931,\"\"),false)))))))))))))", + "or(equals(D_576956950,353358909),or(equals(D_512143997,171498611),or(equals(isNotDefined(D_476938134,\"\"),false),or(equals(isNotDefined(D_561635035,\"\"),false),or(equals(isNotDefined(D_134210521,\"\"),false),or(equals(isNotDefined(D_715370929,\"\"),false),or(equals(isNotDefined(D_726739712,\"\"),false),or(equals(isNotDefined(D_109991481,\"\"),false),or(equals(isNotDefined(D_149514187,\"\"),false),or(equals(isNotDefined(D_494380686,\"\"),false),or(equals(isNotDefined(D_845446624,\"\"),false),or(equals(isNotDefined(D_440796912,\"\"),false),equals(isNotDefined(D_677739650,\"\"),false)))))))))))))", + "or(equals(D_463952618,353358909),or(equals(D_982650994,171498611),or(equals(isNotDefined(D_119483547,\"\"),false),or(equals(isNotDefined(D_194338739,\"\"),false),or(equals(isNotDefined(D_387077376,\"\"),false),or(equals(isNotDefined(D_113352592,\"\"),false),or(equals(isNotDefined(D_148846635,\"\"),false),or(equals(isNotDefined(D_768114466,\"\"),false),or(equals(isNotDefined(D_192663941,\"\"),false),or(equals(isNotDefined(D_938180781,\"\"),false),or(equals(isNotDefined(D_245044197,\"\"),false),or(equals(isNotDefined(D_733365745,\"\"),false),equals(isNotDefined(D_261025083,\"\"),false)))))))))))))", + "or(equals(D_959488634,353358909),or(equals(D_945794974,171498611),or(equals(isNotDefined(D_785588454,\"\"),false),or(equals(isNotDefined(D_419659205,\"\"),false),or(equals(isNotDefined(D_653181757,\"\"),false),or(equals(isNotDefined(D_733619119,\"\"),false),or(equals(isNotDefined(D_571926996,\"\"),false),or(equals(isNotDefined(D_843680322,\"\"),false),or(equals(isNotDefined(D_645589113,\"\"),false),or(equals(isNotDefined(D_716343828,\"\"),false),or(equals(isNotDefined(D_701056236,\"\"),false),or(equals(isNotDefined(D_497260033,\"\"),false),equals(isNotDefined(D_398249766,\"\"),false)))))))))))))", + "or(equals(D_696017690,353358909),or(equals(D_663869343,171498611),or(equals(isNotDefined(D_275244758,\"\"),false),or(equals(isNotDefined(D_688216428,\"\"),false),or(equals(isNotDefined(D_843674851,\"\"),false),or(equals(isNotDefined(D_570311888,\"\"),false),or(equals(isNotDefined(D_101804763,\"\"),false),or(equals(isNotDefined(D_557852952,\"\"),false),or(equals(isNotDefined(D_502068619,\"\"),false),or(equals(isNotDefined(D_970217879,\"\"),false),or(equals(isNotDefined(D_787391994,\"\"),false),or(equals(isNotDefined(D_452103273,\"\"),false),equals(isNotDefined(D_540340377,\"\"),false)))))))))))))", + "or(equals(D_424272506,353358909),or(equals(D_275978701,171498611),or(equals(isNotDefined(D_666445636,\"\"),false),or(equals(isNotDefined(D_398622449,\"\"),false),or(equals(isNotDefined(D_521925072,\"\"),false),or(equals(isNotDefined(D_888514303,\"\"),false),or(equals(isNotDefined(D_686611963,\"\"),false),or(equals(isNotDefined(D_905002640,\"\"),false),or(equals(isNotDefined(D_900950849,\"\"),false),or(equals(isNotDefined(D_687407917,\"\"),false),or(equals(isNotDefined(D_103689435,\"\"),false),or(equals(isNotDefined(D_932828568,\"\"),false),equals(isNotDefined(D_659457234,\"\"),false)))))))))))))", + "or(equals(D_484550481,353358909),or(equals(D_195803565,171498611),or(equals(isNotDefined(D_199489170,\"\"),false),or(equals(isNotDefined(D_605155921,\"\"),false),or(equals(isNotDefined(D_300476868,\"\"),false),or(equals(isNotDefined(D_384403974,\"\"),false),or(equals(isNotDefined(D_860984191,\"\"),false),or(equals(isNotDefined(D_585153023,\"\"),false),or(equals(isNotDefined(D_892150843,\"\"),false),or(equals(isNotDefined(D_248996395,\"\"),false),or(equals(isNotDefined(D_230376384,\"\"),false),or(equals(isNotDefined(D_525778327,\"\"),false),equals(isNotDefined(D_526462982,\"\"),false)))))))))))))", + "or(equals(D_773680071,353358909),or(equals(D_282326355,171498611),or(equals(isNotDefined(D_295693777,\"\"),false),or(equals(isNotDefined(D_646099557,\"\"),false),or(equals(isNotDefined(D_886284650,\"\"),false),or(equals(isNotDefined(D_367684056,\"\"),false),or(equals(isNotDefined(D_599753334,\"\"),false),or(equals(isNotDefined(D_389478638,\"\"),false),or(equals(isNotDefined(D_467126157,\"\"),false),or(equals(isNotDefined(D_949478044,\"\"),false),or(equals(isNotDefined(D_421779583,\"\"),false),or(equals(isNotDefined(D_298170847,\"\"),false),equals(isNotDefined(D_587765197,\"\"),false)))))))))))))", + "or(equals(D_348817644,353358909),or(equals(D_141249692,171498611),or(equals(isNotDefined(D_143093472,\"\"),false),or(equals(isNotDefined(D_746619983,\"\"),false),or(equals(isNotDefined(D_911964974,\"\"),false),or(equals(isNotDefined(D_711881258,\"\"),false),or(equals(isNotDefined(D_450433102,\"\"),false),or(equals(isNotDefined(D_390941579,\"\"),false),or(equals(isNotDefined(D_181005197,\"\"),false),or(equals(isNotDefined(D_737885885,\"\"),false),or(equals(isNotDefined(D_855530921,\"\"),false),or(equals(isNotDefined(D_603853574,\"\"),false),equals(isNotDefined(D_589689090,\"\"),false)))))))))))))", + "or(equals(D_800194290,353358909),or(equals(D_494968690,171498611),or(equals(isNotDefined(D_117703279,\"\"),false),or(equals(isNotDefined(D_734790700,\"\"),false),or(equals(isNotDefined(D_278164536,\"\"),false),or(equals(isNotDefined(D_160188014,\"\"),false),or(equals(isNotDefined(D_983038259,\"\"),false),or(equals(isNotDefined(D_596751155,\"\"),false),or(equals(isNotDefined(D_313586037,\"\"),false),or(equals(isNotDefined(D_624226136,\"\"),false),or(equals(isNotDefined(D_158186064,\"\"),false),or(equals(isNotDefined(D_807127029,\"\"),false),equals(isNotDefined(D_274940131,\"\"),false)))))))))))))", + "noneExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_274940131')", + "someExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_274940131')", + "someExist(\"D_985267931\",\"D_111275683\",\"D_129226572\",\"D_536516743\",\"D_288498031\",\"D_283900560\",\"D_195845897\",\"D_467947502\",\"D_936129960\",\"D_368486703\",\"D_924583345\")|valueEquals(\"D_290969423\",353358909)|valueEquals(\"D_869829679\",270752953)", + "someExist(\"D_875706715\",\"D_645150792\",\"D_585360350\",\"D_588699608\",\"D_648495207\",\"D_544692849\",\"D_300933270\",\"D_335435992\",\"D_649864362\",\"D_337088272\",\"D_723108194\")|valueEquals(\"D_862052821\",353358909)|valueEquals(\"D_845483079\",270752953)", + "someExist(\"D_130174162\",\"D_563832508\",\"D_817839081\",\"D_930511603\",\"D_931999203\",\"D_756548442\",\"D_486511102\",\"D_455968200\",\"D_267027102\",\"D_728704613\",\"D_734345879\")|valueEquals(\"D_593146348\",353358909)|valueEquals(\"D_736086261\",270752953)", + "someExist(\"D_838725845\",\"D_565515774\",\"D_848348504\",\"D_742177990\",\"D_445867902\",\"D_843508307\",\"D_348049244\",\"D_554901696\",\"D_684217044\",\"D_819429013\",\"D_600319581\")|valueEquals(\"D_983592172\",353358909)|valueEquals(\"D_294308065\",270752953)", + "someExist(\"D_306805272\",\"D_819844467\",\"D_164233037\",\"D_418702418\",\"D_218334768\",\"D_101219440\",\"D_394294282\",\"D_127963610\",\"D_803526907\",\"D_882731998\",\"D_941168091\")|valueEquals(\"D_776406200\",353358909)|valueEquals(\"D_385583361\",270752953)", + "someExist(\"D_351559015\",\"D_903490632\",\"D_906119853\",\"D_703944664\",\"D_476697171\",\"D_390463636\",\"D_605344820\",\"D_256790385\",\"D_814644814\",\"D_915222355\",\"D_627992821\")|valueEquals(\"D_135207939\",353358909)|valueEquals(\"D_768802173\",270752953)", + "someExist(\"D_893639464\",\"D_438475588\",\"D_194165243\",\"D_744290061\",\"D_280877371\",\"D_516936572\",\"D_463064782\",\"D_673034401\",\"D_865310914\",\"D_489019597\",\"D_900377581\")|valueEquals(\"D_647612167\",353358909)|valueEquals(\"D_150560299\",270752953)", + "someExist(\"D_988266183\",\"D_709374950\",\"D_853931010\",\"D_351559021\",\"D_548773158\",\"D_290370013\",\"D_487043303\",\"D_453691095\",\"D_659122266\",\"D_202104231\",\"D_388427546\")|valueEquals(\"D_532944666\",353358909)|valueEquals(\"D_122054737\",270752953)", + "someExist(\"D_264707783\",\"D_666011940\",\"D_981594981\",\"D_282089547\",\"D_891573875\",\"D_612617245\",\"D_862255177\",\"D_674024553\",\"D_972332937\",\"D_886247195\",\"D_429200007\")|valueEquals(\"D_548863580\",353358909)|valueEquals(\"D_948492967\",270752953)", + "someExist(\"D_622968789\",\"D_696874548\",\"D_450630128\",\"D_309461541\",\"D_706592013\",\"D_789637860\",\"D_585473282\",\"D_795253129\",\"D_814137809\",\"D_780298998\",\"D_876521406\")|valueEquals(\"D_124320444\",353358909)|valueEquals(\"D_805353966\",270752953)", + "equals(isDefined(D_720221117,-1),-1)", + "and(equals(isDefined(D_720221117,-1),-1),or(or(isNotDefined(D_128827522,false),isNotDefined(D_439447560,false)),or(isNotDefined(D_286781627,false),isNotDefined(D_733929451,false))))", + "exists('D_128827522')", + "doesNotExist(\"D_128827522\")", + "exists('D_439447560')", + "doesNotExist(\"D_439447560\")", + "exists('D_286781627')", + "doesNotExist(\"D_286781627\")", + "exists('D_733929451')", + "doesNotExist(\"D_733929451\")", + "noneExist(\"D_284547539\",\"D_802585033\") and someExist(\"D_890792569\",\"D_451394598\",\"D_984908796\",\"D_847327251\",\"D_128827522\",\"D_439447560\",\"D_286781627\",\"D_733929451\")", + "noneExist('D_284547539','D_802585033','D_746533238','D_128827522','D_890792569','D_439447560','D_451394598','D_286781627','D_984908796','D_733929451','D_847327251') and not valueEquals('D_277348878',778052314)", + "someExist('D_284547539','D_802585033','D_746533238','D_128827522','D_890792569','D_439447560','D_451394598','D_286781627','D_984908796','D_733929451','D_847327251')", + "equals(D_720221117,658491312)", + "equals(D_720221117,351928156)", + "equals(D_720221117,510681016)", + "equals(D_720221117,451961786)", + "equals(D_720221117,902342161)", + "equals(D_720221117,928670216)", + "equals(D_720221117,354020985)", + "equals(D_720221117,583113200)", + "equals(D_720221117,458045785)", + "equals(D_720221117,487265825)", + "equals(D_720221117,883331099)", + "not valueIsOneOf('D_720221117',658491312,351928156,510681016,451961786,902342161,928670216,354020985,583113200,458045785,487265825,883331099) and valueEquals('D_277348878',778052314)", + "noneExist('D_255248624','D_945532934','D_469838242','D_303500597','D_725583683','D_195068098','D_917021073','D_202784871','D_970000442','D_831127170','D_500100435') and valueEquals('D_720221117',658491312)", + "noneExist('D_985267931','D_111275683','D_129226572','D_536516743','D_288498031','D_283900560','D_195845897','D_467947502','D_936129960','D_368486703','D_924583345') and valueEquals('D_720221117',351928156)", + "noneExist('D_875706715','D_645150792','D_585360350','D_588699608','D_648495207','D_544692849','D_300933270','D_335435992','D_649864362','D_337088272','D_723108194') and valueEquals('D_720221117',510681016)", + "noneExist('D_130174162','D_563832508','D_817839081','D_930511603','D_931999203','D_756548442','D_486511102','D_455968200','D_267027102','D_728704613','D_734345879') and valueEquals('D_720221117',451961786)", + "noneExist('D_838725845','D_565515774','D_848348504','D_742177990','D_445867902','D_843508307','D_348049244','D_554901696','D_684217044','D_819429013','D_600319581') and valueEquals('D_720221117',902342161)", + "noneExist('D_306805272','D_819844467','D_164233037','D_418702418','D_218334768','D_101219440','D_394294282','D_127963610','D_803526907','D_882731998','D_941168091') and valueEquals('D_720221117',928670216)", + "noneExist('D_351559015','D_903490632','D_906119853','D_703944664','D_476697171','D_390463636','D_605344820','D_256790385','D_814644814','D_915222355','D_627992821') and valueEquals('D_720221117',354020985)", + "noneExist('D_893639464','D_438475588','D_194165243','D_744290061','D_280877371','D_516936572','D_463064782','D_673034401','D_865310914','D_489019597','D_900377581') and valueEquals('D_720221117',583113200)", + "noneExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546') and valueEquals('D_720221117',458045785)", + "noneExist('D_264707783','D_666011940','D_981594981','D_282089547','D_891573875','D_612617245','D_862255177','D_674024553','D_972332937','D_886247195','D_429200007') and valueEquals('D_720221117',487265825)", + "noneExist('D_622968789','D_696874548','D_450630128','D_309461541','D_706592013','D_789637860','D_585473282','D_795253129','D_814137809','D_780298998','D_876521406') and valueEquals('D_720221117',883331099)", + "noneExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546')and valueEquals('D_720221117',458045785)", + "equals(D_831438612,863839736)", + "equals(D_831438612,531671855)", + "equals(D_831438612,525375987)", + "equals(D_831438612,995797773)", + "equals(D_831438612,431441193)", + "exists('D_834822910')", + "doesNotExist('D_834822910')", + "or(or(isNotDefined(D_627183798,false),isNotDefined(D_901141257,false)),or(isNotDefined(D_599770535,false),isNotDefined(D_268600708,false)))", + "exists('D_627183798')", + "doesNotExist(\"D_627183798\")", + "exists('D_901141257')", + "doesNotExist(\"D_901141257\")", + "exists('D_599770535')", + "doesNotExist(\"D_599770535\")", + "exists('D_268600708')", + "doesNotExist(\"D_268600708\")", + "noneExist(\"D_307515427\",\"D_422521705\") and someExist(\"D_627183798\",\"D_901141257\",\"D_599770535\",\"D_268600708\",\"D_515150210\",\"D_182449282\",\"D_609408466\",\"D_702591232\")", + "noneExist('D_627183798','D_901141257','D_599770535','D_268600708','D_515150210','D_182449282','D_609408466','D_702591232')", + "someExist('D_627183798','D_901141257','D_599770535','D_268600708','D_515150210','D_182449282','D_609408466','D_702591232')", + "valueIsOneOf(\"D_421586693\",767755239,385609081,502946054,151757360,363747463,626380300,817932069,466212511)", + "equals(D_421586693,767755239)", + "equals(D_421586693,385609081)", + "equals(D_421586693,502946054)", + "equals(D_421586693,151757360)", + "equals(D_421586693,363747463)", + "equals(D_421586693,626380300)", + "equals(D_421586693,817932069)", + "equals(D_421586693,466212511)", + "valueIsOneOf(\"D_583216333\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_920653797\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_843066684\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_101850740\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_583216333\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_920653797\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_843066684\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_101850740\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_317194063\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_621948602\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_175502589\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_614443767\",248303092,998679771,638092100,127455035)", + "doesNotEqual(D_614208066,353358909)", + "(not(equals(\"D_614208066\",353358909)) and valueIsOneOf(\"D_799598595\",339946103,364857371,315356220,363036517,978362655,175003260,648051649,957052257)) or (not(equals(\"D_308634850\",353358909)) and valueIsOneOf(\"D_421586693\",767755239,385609081,502946054,151757360,363747463,626380300,817932069,466212511))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,339946103)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,767755239)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,364857371)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,385609081)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,315356220)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,502946054)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,363036517)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,151757360)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,978362655)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,363747463)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,175003260)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,626380300)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,648051649)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,817932069)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,957052257)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,466212511)),equals(D_614208066,353358909)))", + "valueIsOneOf(\"D_827461454\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_306356124\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_884514292\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_570556451\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_827461454\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_306356124\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_884514292\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_570556451\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_303089793\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_848543458\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_543804307\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_654108399\",248303092,998679771,638092100,127455035)", + "valueEquals(\"D_694113343\",353358909) and valueEquals(\"D_699873889\",353358909)", + "or(doesNotEqual(D_576417612,816566846),and(equals(D_694113343,353358909),doesNotEqual(D_699873889,353358909)))", + "and(and(equals(D_576417612,816566846),doesNotEqual(D_871276836,104430631)),equals(D_858178137,353358909))", + "and(equals(D_576417612,816566846),doesNotEqual(D_871276836,104430631))", + "valueEquals(\"D_576417612\",816566846) and valueEquals(\"D_871276836\",104430631)", + "and(equals(D_694113343,353358909),or(equals(D_970148613,353358909),equals(D_374639590,104430631)))", + "equals(D_576417612,816566846)", + "equals(D_374639590,104430631)", + "and(and(equals(D_694113343,353358909),or(equals(D_970148613,353358909),equals(D_374639590,104430631))),doesNotEqual(D_858178137,353358909))", + "valueEquals(\"D_970148613\",353358909) and someExist(\"D_560853245\",\"D_307515427\",\"D_422521705\",\"D_330163034\",\"D_555595404\",\"D_146107174\",\"D_627183798\",\"D_901141257\",\"D_599770535\",\"D_268600708\",\"D_515150210\",\"D_182449282\",\"D_609408466\",\"D_702591232\")", + "or(and(or(equals(D_828801156,759356722),equals(D_828801156,185036360)),equals(D_374639590,104430631)),doesNotEqual(D_211472150,353358909))", + "and(or(and(or(equals(D_828801156,759356722),equals(D_828801156,185036360)),equals(D_374639590,104430631)),doesNotEqual(D_211472150,353358909)),or(or(isNotDefined(D_959804472,false),isNotDefined(D_774707280,false)),or(isNotDefined(D_182144476,false),isNotDefined(D_294634899,false))))", + "exists('D_959804472')", + "doesNotExist(\"D_959804472\")", + "exists('D_774707280')", + "doesNotExist(\"D_774707280\")", + "exists('D_182144476')", + "doesNotExist(\"D_182144476\")", + "exists('D_294634899')", + "doesNotExist(\"D_294634899\")", + "noneExist(\"D_493984171\",\"D_253017624\") and someExist(\"D_583500714\",\"D_742105146\",\"D_101341673\",\"D_237204853\",\"D_959804472\",\"D_774707280\",\"D_182144476\",\"D_294634899\")", + "someExist('D_493984171','D_253017624','D_404141282','D_959804472','D_583500714','D_774707280','D_742105146','D_182144476','D_101341673','D_294634899','D_237204853')", + "noneExist('D_493984171','D_253017624','D_404141282','D_959804472','D_583500714','D_774707280','D_742105146','D_182144476','D_101341673','D_294634899','D_237204853')", + "or(equals(isNotDefined(D_493984171,''),false),or(equals(isNotDefined(D_253017624,''),false),or(equals(isNotDefined(D_404141282,''),false),or(equals(isNotDefined(D_959804472,''),false),or(equals(isNotDefined(D_583500714,''),false),or(equals(isNotDefined(D_774707280,''),false),or(equals(isNotDefined(D_742105146,''),false),or(equals(isNotDefined(D_182144476,''),false),or(equals(isNotDefined(D_101341673,''),false),or(equals(isNotDefined(D_294634899,''),false),equals(isNotDefined(D_237204853,''),false)))))))))))", + "and(equals(isNotDefined(D_493984171,''),true),and(equals(isNotDefined(D_253017624,''),true),and(equals(isNotDefined(D_404141282,''),true),and(equals(isNotDefined(D_959804472,''),true),and(equals(isNotDefined(D_583500714,''),true),and(equals(isNotDefined(D_774707280,''),true),and(equals(isNotDefined(D_742105146,''),true),and(equals(isNotDefined(D_182144476,''),true),and(equals(isNotDefined(D_101341673,''),true),and(equals(isNotDefined(D_294634899,''),true),equals(isNotDefined(D_237204853,''),true)))))))))))", + "equals(D_635467479,158795242)", + "equals(D_635467479,443596662)", + "equals(D_635467479,892894242)", + "equals(D_635467479,177539753)", + "equals(D_635467479,107659596)", + "equals(D_635467479,575883949)", + "equals(D_635467479,248168118)", + "equals(D_635467479,509121242)", + "valueIsOneOf(\"D_593010802\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453004768\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_511991969\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_546570171\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_593010802\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453004768\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_511991969\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_546570171\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_242761203\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_587434250\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_569993305\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_662584384\",248303092,998679771,638092100,127455035)", + "and(and(equals(D_694113343,353358909),or(equals(D_970148613,353358909),equals(D_374639590,104430631))),doesNotEqual(D_684542266,353358909))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,581991828)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,158795242)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,846844103)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,443596662)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,660927579)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,892894242)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,940452831)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,177539753)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,669359763)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,107659596)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,950972496)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,575883949)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,137216656)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,248168118)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,244488084)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,509121242)),equals(D_684542266,353358909)))", + "valueIsOneOf(\"D_659799855\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_552410034\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_772382520\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_146307133\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_659799855\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_552410034\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_772382520\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_146307133\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_100591237\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_823402922\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_289302451\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_419151253\",248303092,998679771,638092100,127455035)", + "or(equals(D_858178137,353358909),equals(D_635780118,353358909))", + "and(doesNotEqual(D_694113343,353358909),doesNotEqual(D_699873889,353358909))", + "or(or(isNotDefined(D_962868433,false),isNotDefined(D_108530997,false)),or(isNotDefined(D_110852652,false),isNotDefined(D_867109611,false)))", + "exists('D_962868433')", + "doesNotExist(\"D_962868433\")", + "exists('D_108530997')", + "doesNotExist(\"D_108530997\")", + "exists('D_110852652')", + "doesNotExist(\"D_110852652\")", + "exists('D_867109611')", + "doesNotExist(\"D_867109611\")", + "noneExist(\"D_903896611\",\"D_855583262\") and someExist(\"D_652022112\",\"D_730666903\",\"D_168091937\",\"D_132779701\",\"D_962868433\",\"D_108530997\",\"D_110852652\",\"D_867109611\")", + "someExist('D_903896611','D_855583262','D_371588177','D_962868433','D_652022112','D_108530997','D_730666903','D_110852652','D_168091937','D_867109611','D_132779701')", + "noneExist('D_903896611','D_855583262','D_371588177','D_962868433','D_652022112','D_108530997','D_730666903','D_110852652','D_168091937','D_867109611','D_132779701')", + "or(equals(isNotDefined(D_903896611,''),false),or(equals(isNotDefined(D_855583262,''),false),or(equals(isNotDefined(D_371588177,''),false),or(equals(isNotDefined(D_962868433,''),false),or(equals(isNotDefined(D_652022112,''),false),or(equals(isNotDefined(D_108530997,''),false),or(equals(isNotDefined(D_730666903,''),false),or(equals(isNotDefined(D_110852652,''),false),or(equals(isNotDefined(D_168091937,''),false),or(equals(isNotDefined(D_867109611,''),false),equals(isNotDefined(D_132779701,''),false)))))))))))", + "and(equals(isNotDefined(D_903896611,''),true),and(equals(isNotDefined(D_855583262,''),true),and(equals(isNotDefined(D_371588177,''),true),and(equals(isNotDefined(D_962868433,''),true),and(equals(isNotDefined(D_652022112,''),true),and(equals(isNotDefined(D_108530997,''),true),and(equals(isNotDefined(D_730666903,''),true),and(equals(isNotDefined(D_110852652,''),true),and(equals(isNotDefined(D_168091937,''),true),and(equals(isNotDefined(D_867109611,''),true),equals(isNotDefined(D_132779701,''),true)))))))))))", + "equals(D_311891586,172103427)", + "equals(D_311891586,794959813)", + "equals(D_311891586,683306241)", + "equals(D_311891586,116442173)", + "equals(D_311891586,639735881)", + "equals(D_311891586,296254034)", + "equals(D_311891586,807973203)", + "equals(D_311891586,766970054)", + "doesNotEqual(D_564557026,353358909)", + "or(doesNotEqual(D_839233937,353358909),doesNotEqual(D_564557026,353358909))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,450075248)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,172103427)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,471142791)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,794959813)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,197093427)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,683306241)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,779421821)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,116442173)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,925663113)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,639735881)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,368973683)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,296254034)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,830201925)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,807973203)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,572643998)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,766970054)),equals(D_564557026,353358909)))", + "or(equals(D_784967158,551525967),equals(D_784967158,738284740))", + "and(or(equals(D_784967158,551525967),equals(D_784967158,738284740)),or(or(isNotDefined(D_161170041,false),isNotDefined(D_660217075,false)),or(isNotDefined(D_884494489,false),isNotDefined(D_403679963,false))))", + "exists('D_161170041')", + "doesNotExist(\"D_161170041\")", + "exists('D_660217075')", + "doesNotExist(\"D_660217075\")", + "exists('D_884494489')", + "doesNotExist(\"D_884494489\")", + "exists('D_403679963')", + "doesNotExist(\"D_403679963\")", + "noneExist(\"D_970996351\",\"D_249657148\") and someExist(\"D_225725599\",\"D_977086216\",\"D_997041632\",\"D_147113671\",\"D_161170041\",\"D_660217075\",\"D_884494489\",\"D_403679963\")", + "noneExist('D_970996351','D_249657148','D_190883115','D_161170041','D_225725599','D_660217075','D_977086216','D_884494489','D_997041632','D_403679963','D_147113671')", + "someExist('D_970996351','D_249657148','D_190883115','D_161170041','D_225725599','D_660217075','D_977086216','D_884494489','D_997041632','D_403679963','D_147113671')", + "or(equals(isNotDefined(D_970996351,''),false),or(equals(isNotDefined(D_249657148,''),false),or(equals(isNotDefined(D_190883115,''),false),or(equals(isNotDefined(D_161170041,''),false),or(equals(isNotDefined(D_225725599,''),false),or(equals(isNotDefined(D_660217075,''),false),or(equals(isNotDefined(D_977086216,''),false),or(equals(isNotDefined(D_884494489,''),false),or(equals(isNotDefined(D_997041632,''),false),or(equals(isNotDefined(D_403679963,''),false),equals(isNotDefined(D_147113671,''),false)))))))))))", + "and(equals(isNotDefined(D_970996351,''),true),and(equals(isNotDefined(D_249657148,''),true),and(equals(isNotDefined(D_190883115,''),true),and(equals(isNotDefined(D_161170041,''),true),and(equals(isNotDefined(D_225725599,''),true),and(equals(isNotDefined(D_660217075,''),true),and(equals(isNotDefined(D_977086216,''),true),and(equals(isNotDefined(D_884494489,''),true),and(equals(isNotDefined(D_997041632,''),true),and(equals(isNotDefined(D_403679963,''),true),equals(isNotDefined(D_147113671,''),true)))))))))))", + "equals(D_404863614,782113721)", + "equals(D_404863614,207263450)", + "equals(D_404863614,638833327)", + "equals(D_404863614,736981982)", + "equals(D_404863614,932195315)", + "equals(D_404863614,279026426)", + "equals(D_404863614,691579493)", + "equals(D_404863614,211269389)", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_891237683\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_980695076\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_265423096\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_185533250\",248303092,998679771,638092100,127455035))", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_891237683\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_980695076\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_265423096\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_185533250\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_769785846\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_330492115\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_173979298\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_154229258\",248303092,998679771,638092100,127455035))", + "and(doesNotEqual(D_496801729,353358909),or(equals(D_784967158,551525967),equals(D_784967158,738284740)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,467242967)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,782113721)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,645051966)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,207263450)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,756061540)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,638833327)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,198883577)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,736981982)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,634680635)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,932195315)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,790657437)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,279026426)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,107428524)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,691579493)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,804918983)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,211269389)),equals(D_496801729,353358909)))", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_990162153\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_576149634\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_291458877\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453417964\",248303092,998679771,638092100,127455035))", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_990162153\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_576149634\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_291458877\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453417964\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_550646850\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_949549557\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_214274185\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_533003859\",248303092,998679771,638092100,127455035))" + ], + "sitesByScope": { + "element": 104, + "inline": 685, + "question": 230, + "response": 330 + }, + "sitesByAttribute": { + "displayif": 1349 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 367, + "processorQuestionCount": 367, + "processedQuestionCount": 367, + "renderedFormCount": 367, + "controlCount": 2817, + "responseControlCount": 1677, + "explicitTransitionCount": 259, + "sequentialAdjacencyCount": 366, + "resolvedExplicitTransitionCount": 259, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 1349, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 479 + } + }, + { + "schemaVersion": 1, + "module": "module4", + "locale": "es", + "language": "es", + "path": "prod/module4Spanish.txt", + "sha256": "c1705fb2632f8c2fda8f22a716fb006eecacde9aa75b153611c4e7f15aec5c3f", + "questName": "D_716117817", + "version": "2.0", + "authoredMarkerCount": 367, + "runtimeQuestionIds": [ + "INTROM4", + "INTRORH", + "D_121490150?", + "D_920576363?", + "D_804504024?", + "HOMEADD4_1", + "D_290969423?", + "D_869829679?", + "D_574985342?", + "D_444145120?", + "D_398762737?", + "HOMEADD4_2", + "D_862052821?", + "D_845483079?", + "D_828086036?", + "D_752101258?", + "D_961572487?", + "HOMEADD4_3", + "D_593146348?", + "D_736086261?", + "D_680046149?", + "D_879180101?", + "D_746604821?", + "HOMEADD4_4", + "D_983592172?", + "D_294308065?", + "D_274189667?", + "D_212343294?", + "D_298296694?", + "HOMEADD4_5", + "D_776406200?", + "D_385583361?", + "D_113930886?", + "D_255474241?", + "D_205492848?", + "HOMEADD4_6", + "D_135207939?", + "D_768802173?", + "D_809728747?", + "D_201906316?", + "D_581231591?", + "HOMEADD4_7", + "D_647612167?", + "D_150560299?", + "D_539057792?", + "D_864213677?", + "D_123104885?", + "HOMEADD4_8", + "D_532944666?", + "D_122054737?", + "D_537011756?", + "D_964853797?", + "D_890661849?", + "HOMEADD4_9", + "D_548863580?", + "D_948492967?", + "D_171937884?", + "D_787064287?", + "D_902193418?", + "HOMEADD4_10", + "D_124320444?", + "D_805353966?", + "D_828766803?", + "D_878688378?", + "D_440597740?", + "HOMEADD4_11", + "HOMEADDSUM_11", + "D_590222838?", + "D_728155643?", + "D_623452399?", + "D_380621340?", + "D_876443676?", + "D_999694720?", + "D_270587543?", + "D_849066624?", + "D_195167143?", + "D_425315696?", + "D_495330716?", + "D_529608184?", + "D_783797179?", + "D_234731641?", + "D_243695994?", + "D_664561394?", + "D_562190570?", + "D_450154625?", + "D_790359238?", + "D_812161236?", + "D_925747671?", + "D_964437163?", + "INTROHOMEWTR", + "D_958419506?", + "D_725408440?", + "D_539909957?", + "D_505863509?", + "D_651233069?", + "D_250486386?", + "D_957717014?", + "D_809387606?", + "D_726654963?", + "D_195367894?", + "D_428044531?", + "D_934184033?", + "D_986989731?", + "D_441498892?", + "D_508187475?", + "D_665978055?", + "D_113557709?", + "D_933017499?", + "D_386487941?", + "D_268661616?", + "D_494698740?", + "D_211740798?", + "D_318621931?", + "D_542086156?", + "D_190307069?", + "D_697751634?", + "D_740535024?", + "D_154170916?", + "D_277745320?", + "D_825109070?", + "D_337574535?", + "D_535386940?", + "D_927932321?", + "INTROSH", + "D_342677547?", + "D_710449106?", + "D_376408004?", + "D_173413183?", + "D_200086909?", + "SEASADD4_1", + "D_576956950?", + "D_512143997?", + "D_279093430?", + "D_657986901?", + "D_509526051?", + "SEASADD4_2", + "D_463952618?", + "D_982650994?", + "D_143927994?", + "D_564684946?", + "D_370121390?", + "SEASADD4_3", + "D_959488634?", + "D_945794974?", + "D_935378391?", + "D_558981691?", + "D_192184336?", + "SEASADD4_4", + "D_696017690?", + "D_663869343?", + "D_320166033?", + "D_194944818?", + "D_763354979?", + "SEASADD4_5", + "D_424272506?", + "D_275978701?", + "D_383535171?", + "D_508587741?", + "D_355179190?", + "SEASADD4_6", + "D_484550481?", + "D_195803565?", + "D_133566757?", + "D_293954660?", + "D_851731394?", + "SEASADD4_7", + "D_773680071?", + "D_282326355?", + "D_509553290?", + "D_268612977?", + "D_172669345?", + "SEASADD4_8", + "D_348817644?", + "D_141249692?", + "D_239279719?", + "D_216096388?", + "D_921998144?", + "SEASADD4_9", + "D_800194290?", + "D_494968690?", + "D_778711683?", + "D_757983656?", + "D_670316988?", + "SEASADD4_10", + "SEASADDSUM_10", + "D_379754686?", + "D_975198123?", + "D_860269869?", + "D_963795928?", + "D_778495585?", + "D_928112898?", + "D_775038507?", + "D_829751791?", + "D_412195193?", + "D_778721228?", + "D_914325712?", + "D_750000285?", + "D_504158362?", + "D_682457230?", + "D_849979952?", + "D_696972918?", + "D_404118353?", + "D_552298163?", + "D_921090200?", + "D_806530984?", + "D_710443293?", + "D_134624195?", + "D_613251957?", + "D_878144094?", + "D_274396191?", + "D_437395872?", + "D_709755471?", + "D_940513931?", + "D_288109261?", + "D_701803756?", + "INTROSEASWTR", + "D_426743354?", + "D_809682067?", + "D_598478268?", + "D_170035952?", + "D_734596352?", + "D_823509509?", + "D_771505558?", + "D_524305502?", + "D_149476435?", + "D_105941645?", + "D_120942783?", + "D_719647239?", + "D_322665488?", + "D_167987013?", + "D_953722451?", + "D_118738120?", + "D_340877879?", + "D_541565665?", + "D_728256340?", + "D_976597527?", + "D_274257975?", + "D_603945794?", + "D_277312204?", + "D_636020848?", + "D_304685106?", + "D_201989756?", + "D_296694684?", + "D_274780951?", + "D_491337167?", + "D_321932473?", + "INTROCH", + "D_277348878?", + "D_720221117?", + "D_632533534?", + "D_264797252?", + "D_469914719?", + "CHILDADD4", + "D_191221569?", + "D_752015272?", + "D_714365367?", + "D_665593888?", + "TAPWTRINTRO", + "D_285545471?", + "D_831438612?", + "D_961178879?", + "D_138116092?", + "D_393682471?", + "D_364303962?", + "D_944517297?", + "D_302947409?", + "COMINTRO", + "INTROWORKPOSTPAN", + "D_699873889?", + "D_213152981?", + "D_858178137?", + "D_871276836?", + "D_660218333?", + "D_263959391?", + "D_986316055?", + "D_116032363?", + "CURWORKPOSTPANCONFIRM", + "D_870675371?", + "D_788065155?", + "D_421586693?", + "D_733638576?", + "D_166943843?", + "D_173155090?", + "D_234136107?", + "D_666629067?", + "D_614208066?", + "D_308634850?", + "D_799598595?", + "D_532260562?", + "D_242268237?", + "D_568581510?", + "D_277953784?", + "D_510872569?", + "INTROCURWORK", + "D_694113343?", + "D_576417612?", + "D_374639590?", + "INTROPREPANDIFF_INTROPREWORK_SKIP", + "INTROPREPANDIFF_SKIP", + "INTROPREPANDIFF", + "D_970148613?", + "D_774087638?", + "D_635780118?", + "D_828801156?", + "D_211472150?", + "D_596318751?", + "D_263588196?", + "D_845811202?", + "CURWORKCONFIRM", + "D_380579855?", + "D_138397553?", + "D_635467479?", + "D_440093675?", + "D_155199731?", + "D_181422361?", + "D_333362587?", + "D_839454121?", + "D_684542266?", + "D_203943120?", + "D_404697804?", + "D_786253125?", + "D_186636914?", + "D_936393993?", + "D_168563469?", + "D_219893040?", + "INTROPREWORK_SKIP", + "INTROPREWORK", + "D_995620555?", + "D_980007418?", + "D_992180692?", + "D_350394531?", + "D_733317111?", + "PREWORKCONFIRM", + "D_569375463?", + "D_822005593?", + "D_311891586?", + "D_968388901?", + "D_335218615?", + "D_564557026?", + "D_839233937?", + "D_251048648?", + "D_679430807?", + "D_475144270?", + "INTROCURSCH", + "D_449752653?", + "D_959371875?", + "D_914696832?", + "D_668887646?", + "D_443679537?", + "CURSCHCONFIRM", + "D_224209278?", + "D_659744749?", + "D_404863614?", + "D_135529881?", + "D_136660779?", + "D_107050954?", + "D_559488982?", + "D_940631293?", + "D_496801729?", + "D_230528407?", + "D_345355061?", + "D_219317801?", + "D_705673076?", + "D_333852852?", + "D_776580384?", + "D_849811593?", + "END" + ], + "responseControlsByType": { + "checkbox": 156, + "number": 72, + "radio": 1054, + "text": 395 + }, + "explicitTransitions": { + "targets": [ + "D_574985342", + "D_590222838", + "D_828086036", + "D_680046149", + "D_274189667", + "D_113930886", + "D_809728747", + "D_539057792", + "D_537011756", + "D_171937884", + "D_828766803", + "D_539909957", + "D_725408440", + "D_250486386", + "D_651233069", + "D_726654963", + "D_809387606", + "D_934184033", + "D_428044531", + "D_508187475", + "D_441498892", + "D_933017499", + "D_113557709", + "D_494698740", + "D_268661616", + "D_542086156", + "D_318621931", + "D_740535024", + "D_697751634", + "D_825109070", + "D_277745320", + "D_927932321", + "D_535386940", + "INTROSH", + "D_376408004", + "D_710449106", + "INTROCH", + "D_279093430", + "D_379754686", + "D_143927994", + "D_935378391", + "D_320166033", + "D_383535171", + "D_133566757", + "D_509553290", + "D_239279719", + "D_778711683", + "D_598478268", + "D_809682067", + "D_823509509", + "D_734596352", + "D_149476435", + "D_524305502", + "D_719647239", + "D_120942783", + "D_953722451", + "D_167987013", + "D_541565665", + "D_340877879", + "D_274257975", + "D_976597527", + "D_636020848", + "D_277312204", + "D_296694684", + "D_201989756", + "D_321932473", + "D_491337167", + "D_720221117", + "D_632533534", + "CHILDADD4", + "D_302947409", + "INTROCURWORK", + "D_666629067", + "D_799598595", + "D_510872569", + "D_532260562", + "INTROPREWORK_SKIP", + "INTROPREPANDIFF_INTROPREWORK_SKIP", + "D_774087638", + "INTROCURSCH", + "D_635467479", + "D_839454121", + "D_404697804", + "D_219893040", + "D_786253125", + "D_995620555", + "D_980007418", + "D_992180692", + "D_335218615", + "D_839233937", + "D_251048648", + "D_475144270", + "D_679430807", + "END", + "D_940631293", + "D_345355061", + "D_849811593", + "D_219317801" + ], + "byKind": { + "default": 6, + "no-response": 76, + "response": 177 + }, + "byResolution": { + "exact": 256, + "terminal": 3 + }, + "triggerTypes": { + "hidden": 82, + "radio": 177 + }, + "triggerValues": [ + "353358909", + "580377720", + "901693169", + "519767819", + "388690303", + "807835037", + "178420302", + "104430631", + "614395648", + "991158851", + "778052314", + "751569137", + "684900118", + "816566846" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "or(or(isNotDefined(D_303500597,false),isNotDefined(D_195068098,false)),or(isNotDefined(D_202784871,false),isNotDefined(D_831127170,false)))", + "exists('D_303500597')", + "doesNotExist(\"D_303500597\")", + "exists('D_195068098')", + "doesNotExist(\"D_195068098\")", + "exists('D_202784871')", + "doesNotExist(\"D_202784871\")", + "exists('D_831127170')", + "doesNotExist(\"D_831127170\")", + "noneExist(\"D_255248624\",\"D_945532934\") and someExist(\"D_725583683\",\"D_917021073\",\"D_970000442\",\"D_500100435\",\"D_303500597\",\"D_195068098\",\"D_202784871\",\"D_831127170\")", + "someExist('D_255248624','D_945532934','D_469838242','D_303500597','D_725583683','D_195068098','D_917021073','D_202784871','D_970000442','D_831127170','D_500100435')", + "noneExist('D_255248624','D_945532934','D_469838242','D_303500597','D_725583683','D_195068098','D_917021073','D_202784871','D_970000442','D_831127170','D_500100435')", + "or(or(isNotDefined(D_536516743,false),isNotDefined(D_283900560,false)),or(isNotDefined(D_467947502,false),isNotDefined(D_368486703,false)))", + "exists('D_536516743')", + "doesNotExist(\"D_536516743\")", + "exists('D_283900560')", + "doesNotExist(\"D_283900560\")", + "exists('D_467947502')", + "doesNotExist(\"D_467947502\")", + "exists('D_368486703')", + "doesNotExist(\"D_368486703\")", + "displayif=noneExist(\"D_985267931\",\"D_111275683\") and someExist(\"D_288498031\",\"D_195845897\",\"D_936129960\",\"D_924583345\",\"D_536516743\",\"D_283900560\",\"D_467947502\",\"D_368486703\")", + "noneExist('D_985267931','D_111275683','D_129226572','D_536516743','D_288498031','D_283900560','D_195845897','D_467947502','D_936129960','D_368486703','D_924583345')", + "someExist('D_985267931','D_111275683','D_129226572','D_536516743','D_288498031','D_283900560','D_195845897','D_467947502','D_936129960','D_368486703','D_924583345')", + "or(or(isNotDefined(D_588699608,false),isNotDefined(D_544692849,false)),or(isNotDefined(D_335435992,false),isNotDefined(D_337088272,false)))", + "exists('D_588699608')", + "doesNotExist(\"D_588699608\")", + "exists('D_544692849')", + "doesNotExist(\"D_544692849\")", + "exists('D_335435992')", + "doesNotExist(\"D_335435992\")", + "exists('D_337088272')", + "doesNotExist(\"D_337088272\")", + "noneExist(\"D_875706715\",\"D_645150792\") and someExist(\"D_648495207\",\"D_300933270\",\"D_649864362\",\"D_723108194\",\"D_588699608\",\"D_544692849\",\"D_335435992\",\"D_337088272\")", + "noneExist('D_875706715','D_645150792','D_585360350','D_588699608','D_648495207','D_544692849','D_300933270','D_335435992','D_649864362','D_337088272','D_723108194')", + "someExist('D_875706715','D_645150792','D_585360350','D_588699608','D_648495207','D_544692849','D_300933270','D_335435992','D_649864362','D_337088272','D_723108194')", + "or(or(isNotDefined(D_930511603,false),isNotDefined(D_756548442,false)),or(isNotDefined(D_455968200,false),isNotDefined(D_728704613,false)))", + "exists('D_930511603')", + "doesNotExist(\"D_930511603\")", + "exists('D_756548442')", + "doesNotExist(\"D_756548442\")", + "exists('D_455968200')", + "doesNotExist(\"D_455968200\")", + "exists('D_728704613')", + "doesNotExist(\"D_728704613\")", + "noneExist(\"D_130174162\",\"D_563832508\") and someExist(\"D_931999203\",\"D_486511102\",\"D_267027102\",\"D_734345879\",\"D_930511603\",\"D_756548442\",\"D_455968200\",\"D_728704613\")", + "noneExist('D_130174162','D_563832508','D_817839081','D_930511603','D_931999203','D_756548442','D_486511102','D_455968200','D_267027102','D_728704613','D_734345879')", + "someExist('D_130174162','D_563832508','D_817839081','D_930511603','D_931999203','D_756548442','D_486511102','D_455968200','D_267027102','D_728704613','D_734345879')", + "or(or(isNotDefined(D_742177990,false),isNotDefined(D_843508307,false)),or(isNotDefined(D_554901696,false),isNotDefined(D_819429013,false)))", + "exists('D_742177990')", + "doesNotExist(\"D_742177990\")", + "exists('D_843508307')", + "doesNotExist(\"D_843508307\")", + "exists('D_554901696')", + "doesNotExist(\"D_554901696\")", + "exists('D_819429013')", + "doesNotExist(\"D_819429013\")", + "noneExist(\"D_838725845\",\"D_565515774\") and someExist(\"D_445867902\",\"D_348049244\",\"D_684217044\",\"D_600319581\",\"D_742177990\",\"D_843508307\",\"D_554901696\",\"D_819429013\")", + "noneExist('D_838725845','D_565515774','D_848348504','D_742177990','D_445867902','D_843508307','D_348049244','D_554901696','D_684217044','D_819429013','D_600319581')", + "someExist('D_838725845','D_565515774','D_848348504','D_742177990','D_445867902','D_843508307','D_348049244','D_554901696','D_684217044','D_819429013','D_600319581')", + "or(or(isNotDefined(D_418702418,false),isNotDefined(D_101219440,false)),or(isNotDefined(D_127963610,false),isNotDefined(D_882731998,false)))", + "exists('D_418702418')", + "doesNotExist(\"D_418702418\")", + "exists('D_101219440')", + "doesNotExist(\"D_101219440\")", + "exists('D_127963610')", + "doesNotExist(\"D_127963610\")", + "exists('D_882731998')", + "doesNotExist(\"D_882731998\")", + "displayif=noneExist(\"D_306805272\",\"D_819844467\") and someExist(\"D_218334768\",\"D_394294282\",\"D_803526907\",\"D_941168091\",\"D_418702418\",\"D_101219440\",\"D_127963610\",\"D_882731998\")", + "noneExist('D_306805272','D_819844467','D_164233037','D_418702418','D_218334768','D_101219440','D_394294282','D_127963610','D_803526907','D_882731998','D_941168091')", + "someExist('D_306805272','D_819844467','D_164233037','D_418702418','D_218334768','D_101219440','D_394294282','D_127963610','D_803526907','D_882731998','D_941168091')", + "or(or(isNotDefined(D_703944664,false),isNotDefined(D_390463636,false)),or(isNotDefined(D_256790385,false),isNotDefined(D_915222355,false)))", + "exists('D_703944664')", + "doesNotExist(\"D_703944664\")", + "exists('D_390463636')", + "doesNotExist(\"D_390463636\")", + "exists('D_256790385')", + "doesNotExist(\"D_256790385\")", + "exists('D_915222355')", + "doesNotExist(\"D_915222355\")", + "noneExist(\"D_351559015\",\"D_903490632\") and someExist(\"D_476697171\",\"D_605344820\",\"D_814644814\",\"D_627992821\",\"D_703944664\",\"D_390463636\",\"D_256790385\",\"D_915222355\")", + "noneExist('D_351559015','D_903490632','D_906119853','D_703944664','D_476697171','D_390463636','D_605344820','D_256790385','D_814644814','D_915222355','D_627992821')", + "someExist('D_351559015','D_903490632','D_906119853','D_703944664','D_476697171','D_390463636','D_605344820','D_256790385','D_814644814','D_915222355','D_627992821')", + "or(or(isNotDefined(D_744290061,false),isNotDefined(D_516936572,false)),or(isNotDefined(D_673034401,false),isNotDefined(D_489019597,false)))", + "exists('D_744290061')", + "doesNotExist(\"D_744290061\")", + "exists('D_516936572')", + "doesNotExist(\"D_516936572\")", + "exists('D_673034401')", + "doesNotExist(\"D_673034401\")", + "exists('D_489019597')", + "doesNotExist(\"D_489019597\")", + "noneExist(\"D_893639464\",\"D_438475588\") and someExist(\"D_280877371\",\"D_463064782\",\"D_865310914\",\"D_900377581\",\"D_744290061\",\"D_516936572\",\"D_673034401\",\"D_489019597\")", + "noneExist('D_893639464','D_438475588','D_194165243','D_744290061','D_280877371','D_516936572','D_463064782','D_673034401','D_865310914','D_489019597','D_900377581')", + "someExist('D_893639464','D_438475588','D_194165243','D_744290061','D_280877371','D_516936572','D_463064782','D_673034401','D_865310914','D_489019597','D_900377581')", + "or(or(isNotDefined(D_351559021,false),isNotDefined(D_290370013,false)),or(isNotDefined(D_453691095,false),isNotDefined(D_202104231,false)))", + "exists('D_351559021')", + "doesNotExist(\"D_351559021\")", + "exists('D_290370013')", + "doesNotExist(\"D_290370013\")", + "exists('D_453691095')", + "doesNotExist(\"D_453691095\")", + "exists('D_202104231')", + "doesNotExist(\"D_202104231\")", + "noneExist(\"D_988266183\",\"D_709374950\") and someExist(\"D_548773158\",\"D_487043303\",\"D_659122266\",\"D_388427546\",\"D_351559021\",\"D_290370013\",\"D_453691095\",\"D_202104231\")", + "noneExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546')", + "someExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546')", + "or(or(isNotDefined(D_282089547,false),isNotDefined(D_612617245,false)),or(isNotDefined(D_674024553,false),isNotDefined(D_886247195,false)))", + "exists('D_282089547')", + "doesNotExist(\"D_282089547\")", + "exists('D_612617245')", + "doesNotExist(\"D_612617245\")", + "exists('D_674024553')", + "doesNotExist(\"D_674024553\")", + "exists('D_886247195')", + "doesNotExist(\"D_886247195\")", + "noneExist(\"D_264707783\",\"D_666011940\") and someExist(\"D_891573875\",\"D_862255177\",\"D_972332937\",\"D_429200007\",\"D_282089547\",\"D_612617245\",\"D_674024553\",\"D_886247195\")", + "noneExist('D_264707783','D_666011940','D_981594981','D_282089547','D_891573875','D_612617245','D_862255177','D_674024553','D_972332937','D_886247195','D_429200007')", + "someExist('D_264707783','D_666011940','D_981594981','D_282089547','D_891573875','D_612617245','D_862255177','D_674024553','D_972332937','D_886247195','D_429200007')", + "or(or(isNotDefined(D_309461541,false),isNotDefined(D_789637860,false)),or(isNotDefined(D_795253129,false),isNotDefined(D_780298998,false)))", + "exists('D_309461541')", + "doesNotExist(\"D_309461541\")", + "exists('D_789637860')", + "doesNotExist(\"D_789637860\")", + "exists('D_795253129')", + "doesNotExist(\"D_795253129\")", + "exists('D_780298998')", + "doesNotExist(\"D_780298998\")", + "noneExist(\"D_622968789\",\"D_696874548\") and someExist(\"D_706592013\",\"D_585473282\",\"D_814137809\",\"D_876521406\",\"D_309461541\",\"D_789637860\",\"D_795253129\",\"D_780298998\")", + "noneExist('D_622968789','D_696874548','D_450630128','D_309461541','D_706592013','D_789637860','D_585473282','D_795253129','D_814137809','D_780298998','D_876521406')", + "someExist('D_622968789','D_696874548','D_450630128','D_309461541','D_706592013','D_789637860','D_585473282','D_795253129','D_814137809','D_780298998','D_876521406')", + "or(equals(D_290969423,353358909),or(equals(D_869829679,270752953),or(equals(isNotDefined(D_985267931,\"\"),false),or(equals(isNotDefined(D_111275683,\"\"),false),or(equals(isNotDefined(D_129226572,\"\"),false),or(equals(isNotDefined(D_536516743,\"\"),false),or(equals(isNotDefined(D_288498031,\"\"),false),or(equals(isNotDefined(D_283900560,\"\"),false),or(equals(isNotDefined(D_195845897,\"\"),false),or(equals(isNotDefined(D_467947502,\"\"),false),or(equals(isNotDefined(D_936129960,\"\"),false),or(equals(isNotDefined(D_368486703,\"\"),false),equals(isNotDefined(D_924583345,\"\"),false)))))))))))))", + "or(equals(D_862052821,353358909),or(equals(D_845483079,270752953),or(equals(isNotDefined(D_875706715,\"\"),false),or(equals(isNotDefined(D_645150792,\"\"),false),or(equals(isNotDefined(D_585360350,\"\"),false),or(equals(isNotDefined(D_588699608,\"\"),false),or(equals(isNotDefined(D_648495207,\"\"),false),or(equals(isNotDefined(D_544692849,\"\"),false),or(equals(isNotDefined(D_300933270,\"\"),false),or(equals(isNotDefined(D_335435992,\"\"),false),or(equals(isNotDefined(D_649864362,\"\"),false),or(equals(isNotDefined(D_337088272,\"\"),false),equals(isNotDefined(D_723108194,\"\"),false)))))))))))))", + "or(equals(D_593146348,353358909),or(equals(D_736086261,270752953),or(equals(isNotDefined(D_130174162,\"\"),false),or(equals(isNotDefined(D_563832508,\"\"),false),or(equals(isNotDefined(D_817839081,\"\"),false),or(equals(isNotDefined(D_930511603,\"\"),false),or(equals(isNotDefined(D_931999203,\"\"),false),or(equals(isNotDefined(D_756548442,\"\"),false),or(equals(isNotDefined(D_486511102,\"\"),false),or(equals(isNotDefined(D_455968200,\"\"),false),or(equals(isNotDefined(D_267027102,\"\"),false),or(equals(isNotDefined(D_728704613,\"\"),false),equals(isNotDefined(D_734345879,\"\"),false)))))))))))))", + "or(equals(D_983592172,353358909),or(equals(D_294308065,270752953),or(equals(isNotDefined(D_838725845,\"\"),false),or(equals(isNotDefined(D_565515774,\"\"),false),or(equals(isNotDefined(D_848348504,\"\"),false),or(equals(isNotDefined(D_742177990,\"\"),false),or(equals(isNotDefined(D_445867902,\"\"),false),or(equals(isNotDefined(D_843508307,\"\"),false),or(equals(isNotDefined(D_348049244,\"\"),false),or(equals(isNotDefined(D_554901696,\"\"),false),or(equals(isNotDefined(D_684217044,\"\"),false),or(equals(isNotDefined(D_819429013,\"\"),false),equals(isNotDefined(D_600319581,\"\"),false)))))))))))))", + "or(equals(D_776406200,353358909),or(equals(D_385583361,270752953),or(equals(isNotDefined(D_306805272,\"\"),false),or(equals(isNotDefined(D_819844467,\"\"),false),or(equals(isNotDefined(D_164233037,\"\"),false),or(equals(isNotDefined(D_418702418,\"\"),false),or(equals(isNotDefined(D_218334768,\"\"),false),or(equals(isNotDefined(D_101219440,\"\"),false),or(equals(isNotDefined(D_394294282,\"\"),false),or(equals(isNotDefined(D_127963610,\"\"),false),or(equals(isNotDefined(D_803526907,\"\"),false),or(equals(isNotDefined(D_882731998,\"\"),false),equals(isNotDefined(D_941168091,\"\"),false)))))))))))))", + "or(equals(D_135207939,353358909),or(equals(D_768802173,270752953),or(equals(isNotDefined(D_351559015,\"\"),false),or(equals(isNotDefined(D_903490632,\"\"),false),or(equals(isNotDefined(D_906119853,\"\"),false),or(equals(isNotDefined(D_703944664,\"\"),false),or(equals(isNotDefined(D_476697171,\"\"),false),or(equals(isNotDefined(D_390463636,\"\"),false),or(equals(isNotDefined(D_605344820,\"\"),false),or(equals(isNotDefined(D_256790385,\"\"),false),or(equals(isNotDefined(D_814644814,\"\"),false),or(equals(isNotDefined(D_915222355,\"\"),false),equals(isNotDefined(D_627992821,\"\"),false)))))))))))))", + "or(equals(D_647612167,353358909),or(equals(D_150560299,270752953),or(equals(isNotDefined(D_893639464,\"\"),false),or(equals(isNotDefined(D_438475588,\"\"),false),or(equals(isNotDefined(D_194165243,\"\"),false),or(equals(isNotDefined(D_744290061,\"\"),false),or(equals(isNotDefined(D_280877371,\"\"),false),or(equals(isNotDefined(D_516936572,\"\"),false),or(equals(isNotDefined(D_463064782,\"\"),false),or(equals(isNotDefined(D_673034401,\"\"),false),or(equals(isNotDefined(D_865310914,\"\"),false),or(equals(isNotDefined(D_489019597,\"\"),false),equals(isNotDefined(D_900377581,\"\"),false)))))))))))))", + "or(equals(D_532944666,353358909),or(equals(D_122054737,270752953),or(equals(isNotDefined(D_988266183,\"\"),false),or(equals(isNotDefined(D_709374950,\"\"),false),or(equals(isNotDefined(D_853931010,\"\"),false),or(equals(isNotDefined(D_351559021,\"\"),false),or(equals(isNotDefined(D_548773158,\"\"),false),or(equals(isNotDefined(D_290370013,\"\"),false),or(equals(isNotDefined(D_487043303,\"\"),false),or(equals(isNotDefined(D_453691095,\"\"),false),or(equals(isNotDefined(D_659122266,\"\"),false),or(equals(isNotDefined(D_202104231,\"\"),false),equals(isNotDefined(D_388427546,\"\"),false)))))))))))))", + "or(equals(D_548863580,353358909),or(equals(D_948492967,270752953),or(equals(isNotDefined(D_264707783,\"\"),false),or(equals(isNotDefined(D_666011940,\"\"),false),or(equals(isNotDefined(D_981594981,\"\"),false),or(equals(isNotDefined(D_282089547,\"\"),false),or(equals(isNotDefined(D_891573875,\"\"),false),or(equals(isNotDefined(D_612617245,\"\"),false),or(equals(isNotDefined(D_862255177,\"\"),false),or(equals(isNotDefined(D_674024553,\"\"),false),or(equals(isNotDefined(D_972332937,\"\"),false),or(equals(isNotDefined(D_886247195,\"\"),false),equals(isNotDefined(D_429200007,\"\"),false)))))))))))))", + "or(equals(D_124320444,353358909),or(equals(D_805353966,270752953),or(equals(isNotDefined(D_622968789,\"\"),false),or(equals(isNotDefined(D_696874548,\"\"),false),or(equals(isNotDefined(D_450630128,\"\"),false),or(equals(isNotDefined(D_309461541,\"\"),false),or(equals(isNotDefined(D_706592013,\"\"),false),or(equals(isNotDefined(D_789637860,\"\"),false),or(equals(isNotDefined(D_585473282,\"\"),false),or(equals(isNotDefined(D_795253129,\"\"),false),or(equals(isNotDefined(D_814137809,\"\"),false),or(equals(isNotDefined(D_780298998,\"\"),false),equals(isNotDefined(D_876521406,\"\"),false)))))))))))))", + "or(or(isNotDefined(D_556576930,false),isNotDefined(D_304326324,false)),or(isNotDefined(D_812433386,false),isNotDefined(D_477319994,false)))", + "exists('D_556576930')", + "doesNotExist(\"D_556576930\")", + "exists('D_304326324')", + "doesNotExist(\"D_304326324\")", + "exists('D_812433386')", + "doesNotExist(\"D_812433386\")", + "exists('D_477319994')", + "doesNotExist(\"D_477319994\")", + "noneExist(\"D_234037089\",\"D_416862112\") and someExist(\"D_416620941\",\"D_915859406\",\"D_354833686\",\"D_661148931\",\"D_556576930\",\"D_304326324\",\"D_812433386\",\"D_477319994\")", + "noneExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_661148931')", + "someExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_661148931')", + "or(or(isNotDefined(D_715370929,false),isNotDefined(D_109991481,false)),or(isNotDefined(D_494380686,false),isNotDefined(D_440796912,false)))", + "exists('D_715370929')", + "doesNotExist(\"D_715370929\")", + "exists('D_109991481')", + "doesNotExist(\"D_109991481\")", + "exists('D_494380686')", + "doesNotExist(\"D_494380686\")", + "exists('D_440796912')", + "doesNotExist(\"D_440796912\")", + "noneExist(\"D_476938134\",\"D_561635035\") and someExist(\"D_726739712\",\"D_149514187\",\"D_845446624\",\"D_677739650\",\"D_715370929\",\"D_109991481\",\"D_494380686\",\"D_440796912\")", + "noneExist('D_476938134','D_561635035','D_134210521','D_715370929','D_726739712','D_109991481','D_149514187','D_494380686','D_845446624','D_440796912','D_677739650')", + "someExist('D_476938134','D_561635035','D_134210521','D_715370929','D_726739712','D_109991481','D_149514187','D_494380686','D_845446624','D_440796912','D_677739650')", + "or(or(isNotDefined(D_113352592,false),isNotDefined(D_768114466,false)),or(isNotDefined(D_938180781,false),isNotDefined(D_733365745,false)))", + "exists('D_113352592')", + "doesNotExist(\"D_113352592\")", + "exists('D_768114466')", + "doesNotExist(\"D_768114466\")", + "exists('D_938180781')", + "doesNotExist(\"D_938180781\")", + "exists('D_733365745')", + "doesNotExist(\"D_733365745\")", + "noneExist(\"D_119483547\",\"D_194338739\") and someExist(\"D_148846635\",\"D_192663941\",\"D_245044197\",\"D_261025083\",\"D_113352592\",\"D_768114466\",\"D_938180781\",\"D_733365745\")", + "noneExist('D_119483547','D_194338739','D_387077376','D_113352592','D_148846635','D_768114466','D_192663941','D_938180781','D_245044197','D_733365745','D_261025083')", + "someExist('D_119483547','D_194338739','D_387077376','D_113352592','D_148846635','D_768114466','D_192663941','D_938180781','D_245044197','D_733365745','D_261025083')", + "or(or(isNotDefined(D_733619119,false),isNotDefined(D_843680322,false)),or(isNotDefined(D_716343828,false),isNotDefined(D_497260033,false)))", + "exists('D_733619119')", + "doesNotExist(\"D_733619119\")", + "exists('D_843680322')", + "doesNotExist(\"D_843680322\")", + "exists('D_716343828')", + "doesNotExist(\"D_716343828\")", + "exists('D_497260033')", + "doesNotExist(\"D_497260033\")", + "noneExist(\"D_785588454\",\"D_419659205\") and someExist(\"D_571926996\",\"D_645589113\",\"D_701056236\",\"D_398249766\",\"D_733619119\",\"D_843680322\",\"D_716343828\",\"D_497260033\")", + "noneExist('D_785588454','D_419659205','D_653181757','D_733619119','D_571926996','D_843680322','D_645589113','D_716343828','D_701056236','D_497260033','D_398249766')", + "someExist('D_785588454','D_419659205','D_653181757','D_733619119','D_571926996','D_843680322','D_645589113','D_716343828','D_701056236','D_497260033','D_398249766')", + "or(or(isNotDefined(D_570311888,false),isNotDefined(D_557852952,false)),or(isNotDefined(D_970217879,false),isNotDefined(D_452103273,false)))", + "exists('D_570311888')", + "doesNotExist(\"D_570311888\")", + "exists('D_557852952')", + "doesNotExist(\"D_557852952\")", + "exists('D_970217879')", + "doesNotExist(\"D_970217879\")", + "exists('D_452103273')", + "doesNotExist(\"D_452103273\")", + "displayif=noneExist(\"D_275244758\",\"D_688216428\") and someExist(\"D_101804763\",\"D_502068619\",\"D_787391994\",\"D_540340377\",\"D_570311888\",\"D_557852952\",\"D_970217879\",\"D_452103273\")", + "noneExist('D_275244758','D_688216428','D_843674851','D_570311888','D_101804763','D_557852952','D_502068619','D_970217879','D_787391994','D_452103273','D_540340377')", + "someExist('D_275244758','D_688216428','D_843674851','D_570311888','D_101804763','D_557852952','D_502068619','D_970217879','D_787391994','D_452103273','D_540340377')", + "or(or(isNotDefined(D_888514303,false),isNotDefined(D_905002640,false)),or(isNotDefined(D_687407917,false),isNotDefined(D_932828568,false)))", + "exists('D_888514303')", + "doesNotExist(\"D_888514303\")", + "exists('D_905002640')", + "doesNotExist(\"D_905002640\")", + "exists('D_687407917')", + "doesNotExist(\"D_687407917\")", + "exists('D_932828568')", + "doesNotExist(\"D_932828568\")", + "noneExist(\"D_666445636\",\"D_398622449\") and someExist(\"D_686611963\",\"D_900950849\",\"D_103689435\",\"D_659457234\",\"D_888514303\",\"D_905002640\",\"D_687407917\",\"D_932828568\")", + "noneExist('D_666445636','D_398622449','D_521925072','D_888514303','D_686611963','D_905002640','D_900950849','D_687407917','D_103689435','D_932828568','D_659457234')", + "someExist('D_666445636','D_398622449','D_521925072','D_888514303','D_686611963','D_905002640','D_900950849','D_687407917','D_103689435','D_932828568','D_659457234')", + "or(or(isNotDefined(D_384403974,false),isNotDefined(D_585153023,false)),or(isNotDefined(D_248996395,false),isNotDefined(D_525778327,false)))", + "exists('D_384403974')", + "doesNotExist(\"D_384403974\")", + "exists('D_585153023')", + "doesNotExist(\"D_585153023\")", + "exists('D_248996395')", + "doesNotExist(\"D_248996395\")", + "exists('D_525778327')", + "doesNotExist(\"D_525778327\")", + "noneExist(\"D_199489170\",\"D_605155921\") and someExist(\"D_860984191\",\"D_892150843\",\"D_230376384\",\"D_526462982\",\"D_384403974\",\"D_585153023\",\"D_248996395\",\"D_525778327\")", + "noneExist('D_199489170','D_605155921','D_300476868','D_384403974','D_860984191','D_585153023','D_892150843','D_248996395','D_230376384','D_525778327','D_526462982')", + "someExist('D_199489170','D_605155921','D_300476868','D_384403974','D_860984191','D_585153023','D_892150843','D_248996395','D_230376384','D_525778327','D_526462982')", + "or(or(isNotDefined(D_367684056,false),isNotDefined(D_389478638,false)),or(isNotDefined(D_949478044,false),isNotDefined(D_298170847,false)))", + "exists('D_367684056')", + "doesNotExist(\"D_367684056\")", + "exists('D_389478638')", + "doesNotExist(\"D_389478638\")", + "exists('D_949478044')", + "doesNotExist(\"D_949478044\")", + "exists('D_298170847')", + "doesNotExist(\"D_298170847\")", + "noneExist(\"D_295693777\",\"D_646099557\") and someExist(\"D_599753334\",\"D_467126157\",\"D_421779583\",\"D_587765197\",\"D_367684056\",\"D_389478638\",\"D_949478044\",\"D_298170847\")", + "noneExist('D_295693777','D_646099557','D_886284650','D_367684056','D_599753334','D_389478638','D_467126157','D_949478044','D_421779583','D_298170847','D_587765197')", + "someExist('D_295693777','D_646099557','D_886284650','D_367684056','D_599753334','D_389478638','D_467126157','D_949478044','D_421779583','D_298170847','D_587765197')", + "or(or(isNotDefined(D_711881258,false),isNotDefined(D_390941579,false)),or(isNotDefined(D_737885885,false),isNotDefined(D_603853574,false)))", + "exists('D_711881258')", + "doesNotExist(\"D_711881258\")", + "exists('D_390941579')", + "doesNotExist(\"D_390941579\")", + "exists('D_737885885')", + "doesNotExist(\"D_737885885\")", + "exists('D_603853574')", + "doesNotExist(\"D_603853574\")", + "noneExist(\"D_143093472\",\"D_746619983\") and someExist(\"D_450433102\",\"D_181005197\",\"D_855530921\",\"D_589689090\",\"D_711881258\",\"D_390941579\",\"D_737885885\",\"D_603853574\")", + "noneExist('D_143093472','D_746619983','D_911964974','D_711881258','D_450433102','D_390941579','D_181005197','D_737885885','D_855530921','D_603853574','D_589689090')", + "someExist('D_143093472','D_746619983','D_911964974','D_711881258','D_450433102','D_390941579','D_181005197','D_737885885','D_855530921','D_603853574','D_589689090')", + "or(or(isNotDefined(D_160188014,false),isNotDefined(D_596751155,false)),or(isNotDefined(D_624226136,false),isNotDefined(D_807127029,false)))", + "exists('D_160188014')", + "doesNotExist(\"D_160188014\")", + "exists('D_596751155')", + "doesNotExist(\"D_596751155\")", + "exists('D_624226136')", + "doesNotExist(\"D_624226136\")", + "exists('D_807127029')", + "doesNotExist(\"D_807127029\")", + "noneExist(\"D_117703279\",\"D_734790700\") and someExist(\"D_983038259\",\"D_313586037\",\"D_158186064\",\"D_274940131\",\"D_160188014\",\"D_596751155\",\"D_624226136\",\"D_807127029\")", + "noneExist('D_117703279','D_734790700','D_278164536','D_160188014','D_983038259','D_596751155','D_313586037','D_624226136','D_158186064','D_807127029','D_274940131')", + "someExist('D_117703279','D_734790700','D_278164536','D_160188014','D_983038259','D_596751155','D_313586037','D_624226136','D_158186064','D_807127029','D_274940131')", + "or(equals(D_342677547,353358909),or(equals(D_710449106,991158851),or(equals(isNotDefined(D_234037089,\"\"),false),or(equals(isNotDefined(D_416862112,\"\"),false),or(equals(isNotDefined(D_671149035,\"\"),false),or(equals(isNotDefined(D_556576930,\"\"),false),or(equals(isNotDefined(D_416620941,\"\"),false),or(equals(isNotDefined(D_304326324,\"\"),false),or(equals(isNotDefined(D_915859406,\"\"),false),or(equals(isNotDefined(D_812433386,\"\"),false),or(equals(isNotDefined(D_354833686,\"\"),false),or(equals(isNotDefined(D_477319994,\"\"),false),equals(isNotDefined(D_661148931,\"\"),false)))))))))))))", + "or(equals(D_576956950,353358909),or(equals(D_512143997,171498611),or(equals(isNotDefined(D_476938134,\"\"),false),or(equals(isNotDefined(D_561635035,\"\"),false),or(equals(isNotDefined(D_134210521,\"\"),false),or(equals(isNotDefined(D_715370929,\"\"),false),or(equals(isNotDefined(D_726739712,\"\"),false),or(equals(isNotDefined(D_109991481,\"\"),false),or(equals(isNotDefined(D_149514187,\"\"),false),or(equals(isNotDefined(D_494380686,\"\"),false),or(equals(isNotDefined(D_845446624,\"\"),false),or(equals(isNotDefined(D_440796912,\"\"),false),equals(isNotDefined(D_677739650,\"\"),false)))))))))))))", + "or(equals(D_463952618,353358909),or(equals(D_982650994,171498611),or(equals(isNotDefined(D_119483547,\"\"),false),or(equals(isNotDefined(D_194338739,\"\"),false),or(equals(isNotDefined(D_387077376,\"\"),false),or(equals(isNotDefined(D_113352592,\"\"),false),or(equals(isNotDefined(D_148846635,\"\"),false),or(equals(isNotDefined(D_768114466,\"\"),false),or(equals(isNotDefined(D_192663941,\"\"),false),or(equals(isNotDefined(D_938180781,\"\"),false),or(equals(isNotDefined(D_245044197,\"\"),false),or(equals(isNotDefined(D_733365745,\"\"),false),equals(isNotDefined(D_261025083,\"\"),false)))))))))))))", + "or(equals(D_959488634,353358909),or(equals(D_945794974,171498611),or(equals(isNotDefined(D_785588454,\"\"),false),or(equals(isNotDefined(D_419659205,\"\"),false),or(equals(isNotDefined(D_653181757,\"\"),false),or(equals(isNotDefined(D_733619119,\"\"),false),or(equals(isNotDefined(D_571926996,\"\"),false),or(equals(isNotDefined(D_843680322,\"\"),false),or(equals(isNotDefined(D_645589113,\"\"),false),or(equals(isNotDefined(D_716343828,\"\"),false),or(equals(isNotDefined(D_701056236,\"\"),false),or(equals(isNotDefined(D_497260033,\"\"),false),equals(isNotDefined(D_398249766,\"\"),false)))))))))))))", + "or(equals(D_696017690,353358909),or(equals(D_663869343,171498611),or(equals(isNotDefined(D_275244758,\"\"),false),or(equals(isNotDefined(D_688216428,\"\"),false),or(equals(isNotDefined(D_843674851,\"\"),false),or(equals(isNotDefined(D_570311888,\"\"),false),or(equals(isNotDefined(D_101804763,\"\"),false),or(equals(isNotDefined(D_557852952,\"\"),false),or(equals(isNotDefined(D_502068619,\"\"),false),or(equals(isNotDefined(D_970217879,\"\"),false),or(equals(isNotDefined(D_787391994,\"\"),false),or(equals(isNotDefined(D_452103273,\"\"),false),equals(isNotDefined(D_540340377,\"\"),false)))))))))))))", + "or(equals(D_424272506,353358909),or(equals(D_275978701,171498611),or(equals(isNotDefined(D_666445636,\"\"),false),or(equals(isNotDefined(D_398622449,\"\"),false),or(equals(isNotDefined(D_521925072,\"\"),false),or(equals(isNotDefined(D_888514303,\"\"),false),or(equals(isNotDefined(D_686611963,\"\"),false),or(equals(isNotDefined(D_905002640,\"\"),false),or(equals(isNotDefined(D_900950849,\"\"),false),or(equals(isNotDefined(D_687407917,\"\"),false),or(equals(isNotDefined(D_103689435,\"\"),false),or(equals(isNotDefined(D_932828568,\"\"),false),equals(isNotDefined(D_659457234,\"\"),false)))))))))))))", + "or(equals(D_484550481,353358909),or(equals(D_195803565,171498611),or(equals(isNotDefined(D_199489170,\"\"),false),or(equals(isNotDefined(D_605155921,\"\"),false),or(equals(isNotDefined(D_300476868,\"\"),false),or(equals(isNotDefined(D_384403974,\"\"),false),or(equals(isNotDefined(D_860984191,\"\"),false),or(equals(isNotDefined(D_585153023,\"\"),false),or(equals(isNotDefined(D_892150843,\"\"),false),or(equals(isNotDefined(D_248996395,\"\"),false),or(equals(isNotDefined(D_230376384,\"\"),false),or(equals(isNotDefined(D_525778327,\"\"),false),equals(isNotDefined(D_526462982,\"\"),false)))))))))))))", + "or(equals(D_773680071,353358909),or(equals(D_282326355,171498611),or(equals(isNotDefined(D_295693777,\"\"),false),or(equals(isNotDefined(D_646099557,\"\"),false),or(equals(isNotDefined(D_886284650,\"\"),false),or(equals(isNotDefined(D_367684056,\"\"),false),or(equals(isNotDefined(D_599753334,\"\"),false),or(equals(isNotDefined(D_389478638,\"\"),false),or(equals(isNotDefined(D_467126157,\"\"),false),or(equals(isNotDefined(D_949478044,\"\"),false),or(equals(isNotDefined(D_421779583,\"\"),false),or(equals(isNotDefined(D_298170847,\"\"),false),equals(isNotDefined(D_587765197,\"\"),false)))))))))))))", + "or(equals(D_348817644,353358909),or(equals(D_141249692,171498611),or(equals(isNotDefined(D_143093472,\"\"),false),or(equals(isNotDefined(D_746619983,\"\"),false),or(equals(isNotDefined(D_911964974,\"\"),false),or(equals(isNotDefined(D_711881258,\"\"),false),or(equals(isNotDefined(D_450433102,\"\"),false),or(equals(isNotDefined(D_390941579,\"\"),false),or(equals(isNotDefined(D_181005197,\"\"),false),or(equals(isNotDefined(D_737885885,\"\"),false),or(equals(isNotDefined(D_855530921,\"\"),false),or(equals(isNotDefined(D_603853574,\"\"),false),equals(isNotDefined(D_589689090,\"\"),false)))))))))))))", + "or(equals(D_800194290,353358909),or(equals(D_494968690,171498611),or(equals(isNotDefined(D_117703279,\"\"),false),or(equals(isNotDefined(D_734790700,\"\"),false),or(equals(isNotDefined(D_278164536,\"\"),false),or(equals(isNotDefined(D_160188014,\"\"),false),or(equals(isNotDefined(D_983038259,\"\"),false),or(equals(isNotDefined(D_596751155,\"\"),false),or(equals(isNotDefined(D_313586037,\"\"),false),or(equals(isNotDefined(D_624226136,\"\"),false),or(equals(isNotDefined(D_158186064,\"\"),false),or(equals(isNotDefined(D_807127029,\"\"),false),equals(isNotDefined(D_274940131,\"\"),false)))))))))))))", + "noneExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_274940131')", + "someExist('D_234037089','D_416862112','D_671149035','D_556576930','D_416620941','D_304326324','D_915859406','D_812433386','D_354833686','D_477319994','D_274940131')", + "someExist(\"D_985267931\",\"D_111275683\",\"D_129226572\",\"D_536516743\",\"D_288498031\",\"D_283900560\",\"D_195845897\",\"D_467947502\",\"D_936129960\",\"D_368486703\",\"D_924583345\")|valueEquals(\"D_290969423\",353358909)|valueEquals(\"D_869829679\",270752953)", + "someExist(\"D_875706715\",\"D_645150792\",\"D_585360350\",\"D_588699608\",\"D_648495207\",\"D_544692849\",\"D_300933270\",\"D_335435992\",\"D_649864362\",\"D_337088272\",\"D_723108194\")|valueEquals(\"D_862052821\",353358909)|valueEquals(\"D_845483079\",270752953)", + "someExist(\"D_130174162\",\"D_563832508\",\"D_817839081\",\"D_930511603\",\"D_931999203\",\"D_756548442\",\"D_486511102\",\"D_455968200\",\"D_267027102\",\"D_728704613\",\"D_734345879\")|valueEquals(\"D_593146348\",353358909)|valueEquals(\"D_736086261\",270752953)", + "someExist(\"D_838725845\",\"D_565515774\",\"D_848348504\",\"D_742177990\",\"D_445867902\",\"D_843508307\",\"D_348049244\",\"D_554901696\",\"D_684217044\",\"D_819429013\",\"D_600319581\")|valueEquals(\"D_983592172\",353358909)|valueEquals(\"D_294308065\",270752953)", + "someExist(\"D_306805272\",\"D_819844467\",\"D_164233037\",\"D_418702418\",\"D_218334768\",\"D_101219440\",\"D_394294282\",\"D_127963610\",\"D_803526907\",\"D_882731998\",\"D_941168091\")|valueEquals(\"D_776406200\",353358909)|valueEquals(\"D_385583361\",270752953)", + "someExist(\"D_351559015\",\"D_903490632\",\"D_906119853\",\"D_703944664\",\"D_476697171\",\"D_390463636\",\"D_605344820\",\"D_256790385\",\"D_814644814\",\"D_915222355\",\"D_627992821\")|valueEquals(\"D_135207939\",353358909)|valueEquals(\"D_768802173\",270752953)", + "someExist(\"D_893639464\",\"D_438475588\",\"D_194165243\",\"D_744290061\",\"D_280877371\",\"D_516936572\",\"D_463064782\",\"D_673034401\",\"D_865310914\",\"D_489019597\",\"D_900377581\")|valueEquals(\"D_647612167\",353358909)|valueEquals(\"D_150560299\",270752953)", + "someExist(\"D_988266183\",\"D_709374950\",\"D_853931010\",\"D_351559021\",\"D_548773158\",\"D_290370013\",\"D_487043303\",\"D_453691095\",\"D_659122266\",\"D_202104231\",\"D_388427546\")|valueEquals(\"D_532944666\",353358909)|valueEquals(\"D_122054737\",270752953)", + "someExist(\"D_264707783\",\"D_666011940\",\"D_981594981\",\"D_282089547\",\"D_891573875\",\"D_612617245\",\"D_862255177\",\"D_674024553\",\"D_972332937\",\"D_886247195\",\"D_429200007\")|valueEquals(\"D_548863580\",353358909)|valueEquals(\"D_948492967\",270752953)", + "someExist(\"D_622968789\",\"D_696874548\",\"D_450630128\",\"D_309461541\",\"D_706592013\",\"D_789637860\",\"D_585473282\",\"D_795253129\",\"D_814137809\",\"D_780298998\",\"D_876521406\")|valueEquals(\"D_124320444\",353358909)|valueEquals(\"D_805353966\",270752953)", + "equals(isDefined(D_720221117,-1),-1)", + "and(equals(isDefined(D_720221117,-1),-1),or(or(isNotDefined(D_128827522,false),isNotDefined(D_439447560,false)),or(isNotDefined(D_286781627,false),isNotDefined(D_733929451,false))))", + "exists('D_128827522')", + "doesNotExist(\"D_128827522\")", + "exists('D_439447560')", + "doesNotExist(\"D_439447560\")", + "exists('D_286781627')", + "doesNotExist(\"D_286781627\")", + "exists('D_733929451')", + "doesNotExist(\"D_733929451\")", + "noneExist(\"D_284547539\",\"D_802585033\") and someExist(\"D_890792569\",\"D_451394598\",\"D_984908796\",\"D_847327251\",\"D_128827522\",\"D_439447560\",\"D_286781627\",\"D_733929451\")", + "noneExist('D_284547539','D_802585033','D_746533238','D_128827522','D_890792569','D_439447560','D_451394598','D_286781627','D_984908796','D_733929451','D_847327251') and not valueEquals('D_277348878',778052314)", + "someExist('D_284547539','D_802585033','D_746533238','D_128827522','D_890792569','D_439447560','D_451394598','D_286781627','D_984908796','D_733929451','D_847327251')", + "equals(D_720221117,658491312)", + "equals(D_720221117,351928156)", + "equals(D_720221117,510681016)", + "equals(D_720221117,451961786)", + "equals(D_720221117,902342161)", + "equals(D_720221117,928670216)", + "equals(D_720221117,354020985)", + "equals(D_720221117,583113200)", + "equals(D_720221117,458045785)", + "equals(D_720221117,487265825)", + "equals(D_720221117,883331099)", + "not valueIsOneOf('D_720221117',658491312,351928156,510681016,451961786,902342161,928670216,354020985,583113200,458045785,487265825,883331099) and valueEquals('D_277348878',778052314)", + "noneExist('D_255248624','D_945532934','D_469838242','D_303500597','D_725583683','D_195068098','D_917021073','D_202784871','D_970000442','D_831127170','D_500100435') and valueEquals('D_720221117',658491312)", + "noneExist('D_985267931','D_111275683','D_129226572','D_536516743','D_288498031','D_283900560','D_195845897','D_467947502','D_936129960','D_368486703','D_924583345') and valueEquals('D_720221117',351928156)", + "noneExist('D_875706715','D_645150792','D_585360350','D_588699608','D_648495207','D_544692849','D_300933270','D_335435992','D_649864362','D_337088272','D_723108194') and valueEquals('D_720221117',510681016)", + "noneExist('D_130174162','D_563832508','D_817839081','D_930511603','D_931999203','D_756548442','D_486511102','D_455968200','D_267027102','D_728704613','D_734345879') and valueEquals('D_720221117',451961786)", + "noneExist('D_838725845','D_565515774','D_848348504','D_742177990','D_445867902','D_843508307','D_348049244','D_554901696','D_684217044','D_819429013','D_600319581') and valueEquals('D_720221117',902342161)", + "noneExist('D_306805272','D_819844467','D_164233037','D_418702418','D_218334768','D_101219440','D_394294282','D_127963610','D_803526907','D_882731998','D_941168091') and valueEquals('D_720221117',928670216)", + "noneExist('D_351559015','D_903490632','D_906119853','D_703944664','D_476697171','D_390463636','D_605344820','D_256790385','D_814644814','D_915222355','D_627992821') and valueEquals('D_720221117',354020985)", + "noneExist('D_893639464','D_438475588','D_194165243','D_744290061','D_280877371','D_516936572','D_463064782','D_673034401','D_865310914','D_489019597','D_900377581') and valueEquals('D_720221117',583113200)", + "noneExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546') and valueEquals('D_720221117',458045785)", + "noneExist('D_264707783','D_666011940','D_981594981','D_282089547','D_891573875','D_612617245','D_862255177','D_674024553','D_972332937','D_886247195','D_429200007') and valueEquals('D_720221117',487265825)", + "noneExist('D_622968789','D_696874548','D_450630128','D_309461541','D_706592013','D_789637860','D_585473282','D_795253129','D_814137809','D_780298998','D_876521406') and valueEquals('D_720221117',883331099)", + "noneExist('D_988266183','D_709374950','D_853931010','D_351559021','D_548773158','D_290370013','D_487043303','D_453691095','D_659122266','D_202104231','D_388427546')and valueEquals('D_720221117',458045785)", + "equals(D_831438612,863839736)", + "equals(D_831438612,531671855)", + "equals(D_831438612,525375987)", + "equals(D_831438612,995797773)", + "equals(D_831438612,431441193)", + "exists('D_834822910')", + "doesNotExist('D_834822910')", + "or(or(isNotDefined(D_627183798,false),isNotDefined(D_901141257,false)),or(isNotDefined(D_599770535,false),isNotDefined(D_268600708,false)))", + "exists('D_627183798')", + "doesNotExist(\"D_627183798\")", + "exists('D_901141257')", + "doesNotExist(\"D_901141257\")", + "exists('D_599770535')", + "doesNotExist(\"D_599770535\")", + "exists('D_268600708')", + "doesNotExist(\"D_268600708\")", + "noneExist(\"D_307515427\",\"D_422521705\") and someExist(\"D_627183798\",\"D_901141257\",\"D_599770535\",\"D_268600708\",\"D_515150210\",\"D_182449282\",\"D_609408466\",\"D_702591232\")", + "noneExist('D_627183798','D_901141257','D_599770535','D_268600708','D_515150210','D_182449282','D_609408466','D_702591232')", + "someExist('D_627183798','D_901141257','D_599770535','D_268600708','D_515150210','D_182449282','D_609408466','D_702591232')", + "valueIsOneOf(\"D_421586693\",767755239,385609081,502946054,151757360,363747463,626380300,817932069,466212511)", + "equals(D_421586693,767755239)", + "equals(D_421586693,385609081)", + "equals(D_421586693,502946054)", + "equals(D_421586693,151757360)", + "equals(D_421586693,363747463)", + "equals(D_421586693,626380300)", + "equals(D_421586693,817932069)", + "equals(D_421586693,466212511)", + "valueIsOneOf(\"D_583216333\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_920653797\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_843066684\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_101850740\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_583216333\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_920653797\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_843066684\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_101850740\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_317194063\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_621948602\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_175502589\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_614443767\",248303092,998679771,638092100,127455035)", + "doesNotEqual(D_614208066,353358909)", + "(not(equals(\"D_614208066\",353358909)) and valueIsOneOf(\"D_799598595\",339946103,364857371,315356220,363036517,978362655,175003260,648051649,957052257)) or (not(equals(\"D_308634850\",353358909)) and valueIsOneOf(\"D_421586693\",767755239,385609081,502946054,151757360,363747463,626380300,817932069,466212511))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,339946103)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,767755239)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,364857371)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,385609081)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,315356220)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,502946054)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,363036517)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,151757360)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,978362655)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,363747463)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,175003260)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,626380300)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,648051649)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,817932069)),equals(D_614208066,353358909)))", + "or(and(doesNotEqual(D_614208066,353358909),equals(D_799598595,957052257)),and(and(doesNotEqual(D_308634850,353358909),equals(D_421586693,466212511)),equals(D_614208066,353358909)))", + "valueIsOneOf(\"D_827461454\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_306356124\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_884514292\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_570556451\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_827461454\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_306356124\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_884514292\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_570556451\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_303089793\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_848543458\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_543804307\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_654108399\",248303092,998679771,638092100,127455035)", + "valueEquals(\"D_694113343\",353358909) and valueEquals(\"D_699873889\",353358909)", + "or(doesNotEqual(D_576417612,816566846),and(equals(D_694113343,353358909),doesNotEqual(D_699873889,353358909)))", + "and(and(equals(D_576417612,816566846),doesNotEqual(D_871276836,104430631)),equals(D_858178137,353358909))", + "and(equals(D_576417612,816566846),doesNotEqual(D_871276836,104430631))", + "valueEquals(\"D_576417612\",816566846) and valueEquals(\"D_871276836\",104430631)", + "and(equals(D_694113343,353358909),or(equals(D_970148613,353358909),equals(D_374639590,104430631)))", + "equals(D_576417612,816566846)", + "equals(D_374639590,104430631)", + "and(and(equals(D_694113343,353358909),or(equals(D_970148613,353358909),equals(D_374639590,104430631))),doesNotEqual(D_858178137,353358909))", + "valueEquals(\"D_970148613\",353358909) and someExist(\"D_560853245\",\"D_307515427\",\"D_422521705\",\"D_330163034\",\"D_555595404\",\"D_146107174\",\"D_627183798\",\"D_901141257\",\"D_599770535\",\"D_268600708\",\"D_515150210\",\"D_182449282\",\"D_609408466\",\"D_702591232\")", + "or(and(or(equals(D_828801156,759356722),equals(D_828801156,185036360)),equals(D_374639590,104430631)),doesNotEqual(D_211472150,353358909))", + "and(or(and(or(equals(D_828801156,759356722),equals(D_828801156,185036360)),equals(D_374639590,104430631)),doesNotEqual(D_211472150,353358909)),or(or(isNotDefined(D_959804472,false),isNotDefined(D_774707280,false)),or(isNotDefined(D_182144476,false),isNotDefined(D_294634899,false))))", + "exists('D_959804472')", + "doesNotExist(\"D_959804472\")", + "exists('D_774707280')", + "doesNotExist(\"D_774707280\")", + "exists('D_182144476')", + "doesNotExist(\"D_182144476\")", + "exists('D_294634899')", + "doesNotExist(\"D_294634899\")", + "noneExist(\"D_493984171\",\"D_253017624\") and someExist(\"D_959804472\",\"D_774707280\",\"D_182144476\",\"D_294634899\", \"D_583500714\",\"D_742105146\",\"D_101341673\",\"D_237204853\")", + "someExist('D_493984171','D_253017624','D_404141282','D_959804472','D_583500714','D_774707280','D_742105146','D_182144476','D_101341673','D_294634899','D_237204853')", + "noneExist('D_493984171','D_253017624','D_404141282','D_959804472','D_583500714','D_774707280','D_742105146','D_182144476','D_101341673','D_294634899','D_237204853')", + "or(equals(isNotDefined(D_493984171,''),false),or(equals(isNotDefined(D_253017624,''),false),or(equals(isNotDefined(D_404141282,''),false),or(equals(isNotDefined(D_959804472,''),false),or(equals(isNotDefined(D_583500714,''),false),or(equals(isNotDefined(D_774707280,''),false),or(equals(isNotDefined(D_742105146,''),false),or(equals(isNotDefined(D_182144476,''),false),or(equals(isNotDefined(D_101341673,''),false),or(equals(isNotDefined(D_294634899,''),false),equals(isNotDefined(D_237204853,''),false)))))))))))", + "and(equals(isNotDefined(D_493984171,''),true),and(equals(isNotDefined(D_253017624,''),true),and(equals(isNotDefined(D_404141282,''),true),and(equals(isNotDefined(D_959804472,''),true),and(equals(isNotDefined(D_583500714,''),true),and(equals(isNotDefined(D_774707280,''),true),and(equals(isNotDefined(D_742105146,''),true),and(equals(isNotDefined(D_182144476,''),true),and(equals(isNotDefined(D_101341673,''),true),and(equals(isNotDefined(D_294634899,''),true),equals(isNotDefined(D_237204853,''),true)))))))))))", + "equals(D_635467479,158795242)", + "equals(D_635467479,443596662)", + "equals(D_635467479,892894242)", + "equals(D_635467479,177539753)", + "equals(D_635467479,107659596)", + "equals(D_635467479,575883949)", + "equals(D_635467479,248168118)", + "equals(D_635467479,509121242)", + "valueIsOneOf(\"D_593010802\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453004768\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_511991969\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_546570171\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_593010802\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453004768\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_511991969\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_546570171\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_242761203\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_587434250\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_569993305\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_662584384\",248303092,998679771,638092100,127455035)", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,581991828)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,158795242)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,846844103)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,443596662)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,660927579)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,892894242)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,940452831)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,177539753)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,669359763)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,107659596)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,950972496)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,575883949)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,137216656)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,248168118)),equals(D_684542266,353358909)))", + "or(and(doesNotEqual(D_684542266,353358909),equals(D_404697804,244488084)),and(and(doesNotEqual(D_203943120,353358909),equals(D_635467479,509121242)),equals(D_684542266,353358909)))", + "valueIsOneOf(\"D_659799855\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_552410034\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_772382520\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_146307133\",248303092,998679771,638092100,127455035)", + "valueIsOneOf(\"D_659799855\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_552410034\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_772382520\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_146307133\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_100591237\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_823402922\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_289302451\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_419151253\",248303092,998679771,638092100,127455035)", + "or(equals(D_858178137,353358909),equals(D_635780118,353358909))", + "and(doesNotEqual(D_694113343,353358909),doesNotEqual(D_699873889,353358909))", + "or(or(isNotDefined(D_962868433,false),isNotDefined(D_108530997,false)),or(isNotDefined(D_110852652,false),isNotDefined(D_867109611,false)))", + "exists('D_962868433')", + "doesNotExist(\"D_962868433\")", + "exists('D_108530997')", + "doesNotExist(\"D_108530997\")", + "exists('D_110852652')", + "doesNotExist(\"D_110852652\")", + "exists('D_867109611')", + "doesNotExist(\"D_867109611\")", + "noneExist(\"D_903896611\",\"D_855583262\") and someExist(\"D_962868433\",\"D_108530997\",\"D_110852652\",\"D_867109611\",\"D_652022112\",\"D_730666903\",\"D_168091937\",\"D_132779701\")", + "someExist('D_903896611','D_855583262','D_371588177','D_962868433','D_652022112','D_108530997','D_730666903','D_110852652','D_168091937','D_867109611','D_132779701')", + "noneExist('D_903896611','D_855583262','D_371588177','D_962868433','D_652022112','D_108530997','D_730666903','D_110852652','D_168091937','D_867109611','D_132779701')", + "or(equals(isNotDefined(D_903896611,''),false),or(equals(isNotDefined(D_855583262,''),false),or(equals(isNotDefined(D_371588177,''),false),or(equals(isNotDefined(D_962868433,''),false),or(equals(isNotDefined(D_652022112,''),false),or(equals(isNotDefined(D_108530997,''),false),or(equals(isNotDefined(D_730666903,''),false),or(equals(isNotDefined(D_110852652,''),false),or(equals(isNotDefined(D_168091937,''),false),or(equals(isNotDefined(D_867109611,''),false),equals(isNotDefined(D_132779701,''),false)))))))))))", + "and(equals(isNotDefined(D_903896611,''),true),and(equals(isNotDefined(D_855583262,''),true),and(equals(isNotDefined(D_371588177,''),true),and(equals(isNotDefined(D_962868433,''),true),and(equals(isNotDefined(D_652022112,''),true),and(equals(isNotDefined(D_108530997,''),true),and(equals(isNotDefined(D_730666903,''),true),and(equals(isNotDefined(D_110852652,''),true),and(equals(isNotDefined(D_168091937,''),true),and(equals(isNotDefined(D_867109611,''),true),equals(isNotDefined(D_132779701,''),true)))))))))))", + "equals(D_311891586,172103427)", + "equals(D_311891586,794959813)", + "equals(D_311891586,683306241)", + "equals(D_311891586,116442173)", + "equals(D_311891586,639735881)", + "equals(D_311891586,296254034)", + "equals(D_311891586,807973203)", + "equals(D_311891586,766970054)", + "doesNotEqual(D_564557026,353358909)", + "or(doesNotEqual(D_839233937,353358909),doesNotEqual(D_564557026,353358909))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,450075248)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,172103427)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,471142791)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,794959813)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,197093427)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,683306241)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,779421821)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,116442173)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,925663113)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,639735881)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,368973683)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,296254034)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,830201925)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,807973203)),equals(D_564557026,353358909)))", + "or(and(doesNotEqual(D_564557026,353358909),equals(D_251048648,572643998)),and(and(doesNotEqual(D_839233937,353358909),equals(D_311891586,766970054)),equals(D_564557026,353358909)))", + "or(equals(D_784967158,551525967),equals(D_784967158,738284740))", + "and(or(equals(D_784967158,551525967),equals(D_784967158,738284740)),or(or(isNotDefined(D_161170041,false),isNotDefined(D_660217075,false)),or(isNotDefined(D_884494489,false),isNotDefined(D_403679963,false))))", + "exists('D_161170041')", + "doesNotExist(\"D_161170041\")", + "exists('D_660217075')", + "doesNotExist(\"D_660217075\")", + "exists('D_884494489')", + "doesNotExist(\"D_884494489\")", + "exists('D_403679963')", + "doesNotExist(\"D_403679963\")", + "noneExist(\"D_970996351\",\"D_249657148\") and someExist(\"D_161170041\",\"D_660217075\",\"D_884494489\",\"D_403679963\",\"D_225725599\",\"D_977086216\",\"D_997041632\",\"D_147113671\")", + "someExist('D_970996351','D_249657148','D_190883115','D_161170041','D_225725599','D_660217075','D_977086216','D_884494489','D_997041632','D_403679963','D_147113671')", + "noneExist('D_970996351','D_249657148','D_190883115','D_161170041','D_225725599','D_660217075','D_977086216','D_884494489','D_997041632','D_403679963','D_147113671')", + "or(equals(isNotDefined(D_970996351,''),false),or(equals(isNotDefined(D_249657148,''),false),or(equals(isNotDefined(D_190883115,''),false),or(equals(isNotDefined(D_161170041,''),false),or(equals(isNotDefined(D_225725599,''),false),or(equals(isNotDefined(D_660217075,''),false),or(equals(isNotDefined(D_977086216,''),false),or(equals(isNotDefined(D_884494489,''),false),or(equals(isNotDefined(D_997041632,''),false),or(equals(isNotDefined(D_403679963,''),false),equals(isNotDefined(D_147113671,''),false)))))))))))", + "and(equals(isNotDefined(D_970996351,''),true),and(equals(isNotDefined(D_249657148,''),true),and(equals(isNotDefined(D_190883115,''),true),and(equals(isNotDefined(D_161170041,''),true),and(equals(isNotDefined(D_225725599,''),true),and(equals(isNotDefined(D_660217075,''),true),and(equals(isNotDefined(D_977086216,''),true),and(equals(isNotDefined(D_884494489,''),true),and(equals(isNotDefined(D_997041632,''),true),and(equals(isNotDefined(D_403679963,''),true),equals(isNotDefined(D_147113671,''),true)))))))))))", + "equals(D_404863614,782113721)", + "equals(D_404863614,207263450)", + "equals(D_404863614,638833327)", + "equals(D_404863614,736981982)", + "equals(D_404863614,932195315)", + "equals(D_404863614,279026426)", + "equals(D_404863614,691579493)", + "equals(D_404863614,211269389)", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_891237683\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_980695076\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_265423096\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_185533250\",248303092,998679771,638092100,127455035))", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_891237683\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_980695076\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_265423096\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_185533250\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_769785846\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_330492115\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_173979298\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_154229258\",248303092,998679771,638092100,127455035))", + "and(doesNotEqual(D_496801729,353358909),or(equals(D_784967158,551525967),equals(D_784967158,738284740)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,467242967)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,782113721)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,645051966)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,207263450)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,756061540)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,638833327)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,198883577)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,736981982)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,634680635)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,932195315)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,790657437)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,279026426)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,107428524)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,691579493)),equals(D_496801729,353358909)))", + "or(and(doesNotEqual(D_496801729,353358909),equals(D_345355061,804918983)),and(and(doesNotEqual(D_230528407,353358909),equals(D_404863614,211269389)),equals(D_496801729,353358909)))", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_990162153\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_576149634\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_291458877\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453417964\",248303092,998679771,638092100,127455035))", + "valueIsOneOf(\"D_784967158\",551525967,738284740) and (valueIsOneOf(\"D_990162153\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_576149634\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_291458877\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_453417964\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_550646850\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_949549557\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_214274185\",248303092,998679771,638092100,127455035) or valueIsOneOf(\"D_533003859\",248303092,998679771,638092100,127455035))" + ], + "sitesByScope": { + "element": 104, + "inline": 683, + "question": 230, + "response": 330 + }, + "sitesByAttribute": { + "displayif": 1347 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 367, + "processorQuestionCount": 367, + "processedQuestionCount": 367, + "renderedFormCount": 367, + "controlCount": 2818, + "responseControlCount": 1677, + "explicitTransitionCount": 259, + "sequentialAdjacencyCount": 366, + "resolvedExplicitTransitionCount": 259, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 1347, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 478 + } + }, + { + "schemaVersion": 1, + "module": "moduleBiospecimen", + "locale": "en", + "language": "en", + "path": "prod/moduleBiospecimen.txt", + "sha256": "3511079715fecaf0498d2a3f197f3cce400a9a4674af0947ff740b68ddfb5d22", + "questName": "D_299215535", + "version": "1.4", + "authoredMarkerCount": 52, + "runtimeQuestionIds": [ + "SRVBIO_MODULEINTRO_V1R0", + "D_522008539?", + "D_470484596?", + "D_867307558?", + "D_191057574_V2?", + "D_299417266_V2?", + "D_689861450_V2?", + "D_487532606", + "SRVBLU_REPROINTRO_V1R0", + "D_380603392!", + "D_112151599!", + "D_644459734!", + "D_518916981?", + "D_234714655?", + "D_798452445?", + "D_563539159?", + "D_875535246?", + "D_130311122?", + "D_350251057?", + "D_877878167?", + "D_800703566?", + "D_294886836?", + "D_642044281?", + "D_479143504?", + "D_498984275?", + "D_205713835?", + "D_353467497?", + "D_429994023?", + "D_499977481?", + "D_406270109?", + "D_349659426?", + "D_766370065?", + "D_520416570?", + "D_921972241?", + "D_526973271?", + "D_460873842?", + "D_430060900?", + "D_800752981?", + "D_899251483_V2?", + "D_724589244?", + "D_957305523?", + "D_360678252?", + "D_542661394?", + "D_339570897?", + "D_983043203?", + "D_736028153?", + "D_792134396?", + "D_736393021?", + "D_318641324?", + "END" + ], + "responseControlsByType": { + "checkbox": 31, + "date": 1, + "radio": 168, + "time": 3 + }, + "explicitTransitions": { + "targets": [ + "D_299417266_V2", + "D_518916981", + "D_798452445", + "D_875535246", + "D_498984275", + "D_205713835", + "D_353467497", + "D_429994023", + "D_499977481", + "D_406270109", + "D_349659426", + "D_766370065", + "D_520416570", + "D_921972241", + "D_526973271", + "D_460873842", + "D_430060900", + "D_800752981", + "D_724589244", + "D_957305523", + "D_360678252", + "END" + ], + "byKind": { + "no-response": 1, + "response": 24 + }, + "byResolution": { + "exact": 22, + "terminal": 3 + }, + "triggerTypes": { + "checkbox": 17, + "hidden": 1, + "radio": 7 + }, + "triggerValues": [ + "330461666", + "104430631", + "353358909", + "203919683", + "807884576", + "165596977", + "578402172", + "184513726", + "390351864", + "950773275", + "762727133", + "877842367", + "886771318", + "404389800", + "463302301", + "259744087", + "523660949", + "812107266", + "452438775", + "886864375", + "178420302" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_522008539,536341288)", + "equals(D_518916981,104430631)", + "equals(D_479143504,203919683)", + "equals(D_479143504,807884576)", + "equals(D_479143504,165596977)", + "equals(D_479143504,578402172)", + "equals(D_479143504,184513726)", + "equals(D_479143504,390351864)", + "equals(D_406270109,950773275)", + "equals(D_406270109,762727133)", + "equals(D_406270109,877842367)", + "equals(D_406270109,886771318)", + "equals(D_406270109,404389800)", + "equals(D_406270109,463302301)", + "equals(D_406270109,259744087)", + "equals(D_406270109,523660949)", + "equals(D_899251483_V2,812107266)", + "equals(D_899251483_V2,452438775)", + "equals(D_899251483_V2,886864375)" + ], + "sitesByScope": { + "question": 27 + }, + "sitesByAttribute": { + "displayif": 27 + } + }, + "grids": [ + { + "questionId": "D_487532606", + "questionIndex": 7, + "rowQuestionIds": [ + "D_619765650", + "D_520755310", + "D_839329467" + ], + "rowCount": 3, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "104430631", + "974230748", + "936042740", + "731141335", + "591670915" + ] + } + ], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 52, + "processorQuestionCount": 50, + "processedQuestionCount": 50, + "renderedFormCount": 50, + "controlCount": 350, + "responseControlCount": 203, + "explicitTransitionCount": 25, + "sequentialAdjacencyCount": 49, + "resolvedExplicitTransitionCount": 25, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 27, + "gridQuestionCount": 1, + "gridRowCount": 3, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 19 + } + }, + { + "schemaVersion": 1, + "module": "moduleBiospecimen", + "locale": "es", + "language": "es", + "path": "prod/moduleBiospecimenSpanish.txt", + "sha256": "16f3ae9976bc65506da60281fe17e27f6701109e6a5b67d9b65e044805259192", + "questName": "D_299215535", + "version": "1.4", + "authoredMarkerCount": 53, + "runtimeQuestionIds": [ + "SRVBIO_MODULEINTRO_V1R0", + "D_522008539?", + "D_470484596?", + "D_867307558?", + "D_191057574_V2?", + "D_299417266_V2?", + "D_689861450_V2?", + "D_487532606", + "SRVBLU_REPROINTRO_V1R0", + "D_380603392!", + "D_112151599!", + "D_644459734!", + "D_518916981?", + "D_234714655?", + "D_798452445?", + "D_563539159?", + "D_875535246?", + "D_130311122?", + "SRVMTW_MODULEINTRO_V1R0", + "D_350251057?", + "D_877878167?", + "D_800703566?", + "D_294886836?", + "D_642044281?", + "D_479143504?", + "D_498984275?", + "D_205713835?", + "D_353467497?", + "D_429994023?", + "D_499977481?", + "D_406270109?", + "D_349659426?", + "D_766370065?", + "D_520416570?", + "D_921972241?", + "D_526973271?", + "D_460873842?", + "D_430060900?", + "D_800752981?", + "D_899251483_V2?", + "D_724589244?", + "D_957305523?", + "D_360678252?", + "D_542661394?", + "D_339570897?", + "D_983043203?", + "D_736028153?", + "D_792134396?", + "D_736393021?", + "D_318641324?", + "END" + ], + "responseControlsByType": { + "checkbox": 31, + "date": 1, + "radio": 168, + "time": 3 + }, + "explicitTransitions": { + "targets": [ + "D_299417266_V2", + "D_518916981", + "D_798452445", + "D_875535246", + "D_498984275", + "D_205713835", + "D_353467497", + "D_429994023", + "D_499977481", + "D_406270109", + "D_349659426", + "D_766370065", + "D_520416570", + "D_921972241", + "D_526973271", + "D_460873842", + "D_430060900", + "D_800752981", + "D_724589244", + "D_957305523", + "D_360678252", + "END" + ], + "byKind": { + "no-response": 1, + "response": 24 + }, + "byResolution": { + "exact": 22, + "terminal": 3 + }, + "triggerTypes": { + "checkbox": 17, + "hidden": 1, + "radio": 7 + }, + "triggerValues": [ + "330461666", + "104430631", + "353358909", + "203919683", + "807884576", + "165596977", + "578402172", + "184513726", + "390351864", + "950773275", + "762727133", + "877842367", + "886771318", + "404389800", + "463302301", + "259744087", + "523660949", + "812107266", + "452438775", + "886864375", + "178420302" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_522008539,536341288)", + "equals(D_518916981,104430631)", + "equals(D_479143504,203919683)", + "equals(D_479143504,807884576)", + "equals(D_479143504,165596977)", + "equals(D_479143504,578402172)", + "equals(D_479143504,184513726)", + "equals(D_479143504,390351864)", + "equals(D_406270109,950773275)", + "equals(D_406270109,762727133)", + "equals(D_406270109,877842367)", + "equals(D_406270109,886771318)", + "equals(D_406270109,404389800)", + "equals(D_406270109,463302301)", + "equals(D_406270109,259744087)", + "equals(D_406270109,523660949)", + "equals(D_899251483_V2,812107266)", + "equals(D_899251483_V2,452438775)", + "equals(D_899251483_V2,886864375)" + ], + "sitesByScope": { + "question": 27 + }, + "sitesByAttribute": { + "displayif": 27 + } + }, + "grids": [ + { + "questionId": "D_487532606", + "questionIndex": 7, + "rowQuestionIds": [ + "D_619765650", + "D_520755310", + "D_839329467" + ], + "rowCount": 3, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "104430631", + "974230748", + "936042740", + "731141335", + "591670915" + ] + } + ], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 53, + "processorQuestionCount": 51, + "processedQuestionCount": 51, + "renderedFormCount": 51, + "controlCount": 352, + "responseControlCount": 203, + "explicitTransitionCount": 25, + "sequentialAdjacencyCount": 50, + "resolvedExplicitTransitionCount": 25, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 27, + "gridQuestionCount": 1, + "gridRowCount": 3, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 19 + } + }, + { + "schemaVersion": 1, + "module": "moduleCOVID19", + "locale": "en", + "language": "en", + "path": "prod/moduleCOVID19.txt", + "sha256": "5d3dfa29799998557fd85d168869f9b1f122d3d957f443a7a423ec12304c6426", + "questName": "D_793330426", + "version": "1.3", + "authoredMarkerCount": 97, + "runtimeQuestionIds": [ + "SRVCOV_COVIDINTRO_V1R0", + "D_494226443?", + "D_860011428?", + "D_980800222_V2_1_1!", + "D_366980310_1_1?", + "D_498462481_1_1?", + "D_694503437_1_1?", + "D_451163824_1_1?", + "D_705336878_1_1?", + "D_928530823_1_1?", + "D_108733102_1_1?", + "D_389465772_1_1?", + "D_775313030_1_1?", + "D_744230001_1_1?", + "D_782396371_1_1?", + "D_930944000_1_1?", + "D_984121390_1_1?", + "D_430166879_1_1?", + "D_179406442_1_1?", + "D_803339020_1_1?", + "D_893966847_1_1?", + "D_169509213_1_1?", + "SRVCOV_COVSUMMARY_V1R0_1_1", + "D_980800222_V2_2_2!", + "D_366980310_2_2?", + "D_498462481_2_2?", + "D_694503437_2_2?", + "D_451163824_2_2?", + "D_705336878_2_2?", + "D_928530823_2_2?", + "D_108733102_2_2?", + "D_389465772_2_2?", + "D_775313030_2_2?", + "D_744230001_2_2?", + "D_782396371_2_2?", + "D_930944000_2_2?", + "D_984121390_2_2?", + "D_430166879_2_2?", + "D_179406442_2_2?", + "D_803339020_2_2?", + "D_893966847_2_2?", + "D_169509213_2_2?", + "SRVCOV_COVSUMMARY_V1R0_2_2", + "D_980800222_V2_3_3!", + "D_366980310_3_3?", + "D_498462481_3_3?", + "D_694503437_3_3?", + "D_451163824_3_3?", + "D_705336878_3_3?", + "D_928530823_3_3?", + "D_108733102_3_3?", + "D_389465772_3_3?", + "D_775313030_3_3?", + "D_744230001_3_3?", + "D_782396371_3_3?", + "D_930944000_3_3?", + "D_984121390_3_3?", + "D_430166879_3_3?", + "D_179406442_3_3?", + "D_803339020_3_3?", + "D_893966847_3_3?", + "D_169509213_3_3?", + "SRVCOV_COVSUMMARY_V1R0_3_3", + "D_980800222_V2_4_4!", + "D_366980310_4_4?", + "D_498462481_4_4?", + "D_694503437_4_4?", + "D_451163824_4_4?", + "D_705336878_4_4?", + "D_928530823_4_4?", + "D_108733102_4_4?", + "D_389465772_4_4?", + "D_775313030_4_4?", + "D_744230001_4_4?", + "D_782396371_4_4?", + "D_930944000_4_4?", + "D_984121390_4_4?", + "D_430166879_4_4?", + "D_179406442_4_4?", + "D_803339020_4_4?", + "D_893966847_4_4?", + "D_169509213_4_4?", + "SRVCOV_COVSUMMARY_V1R0_4_4", + "D_980800222_V2_5_5!", + "D_366980310_5_5?", + "D_498462481_5_5?", + "D_694503437_5_5?", + "D_451163824_5_5?", + "D_705336878_5_5?", + "D_928530823_5_5?", + "D_108733102_5_5?", + "D_389465772_5_5?", + "D_775313030_5_5?", + "D_744230001_5_5?", + "D_782396371_5_5?", + "D_930944000_5_5?", + "D_984121390_5_5?", + "D_430166879_5_5?", + "D_179406442_5_5?", + "D_803339020_5_5?", + "D_893966847_5_5?", + "D_169509213_5_5?", + "SRVCOV_COVSUMMARY_V1R0_5_5", + "D_980800222_V2_6_6!", + "D_366980310_6_6?", + "D_498462481_6_6?", + "D_694503437_6_6?", + "D_451163824_6_6?", + "D_705336878_6_6?", + "D_928530823_6_6?", + "D_108733102_6_6?", + "D_389465772_6_6?", + "D_775313030_6_6?", + "D_744230001_6_6?", + "D_782396371_6_6?", + "D_930944000_6_6?", + "D_984121390_6_6?", + "D_430166879_6_6?", + "D_179406442_6_6?", + "D_803339020_6_6?", + "D_893966847_6_6?", + "D_169509213_6_6?", + "SRVCOV_COVSUMMARY_V1R0_6_6", + "D_980800222_V2_7_7!", + "D_366980310_7_7?", + "D_498462481_7_7?", + "D_694503437_7_7?", + "D_451163824_7_7?", + "D_705336878_7_7?", + "D_928530823_7_7?", + "D_108733102_7_7?", + "D_389465772_7_7?", + "D_775313030_7_7?", + "D_744230001_7_7?", + "D_782396371_7_7?", + "D_930944000_7_7?", + "D_984121390_7_7?", + "D_430166879_7_7?", + "D_179406442_7_7?", + "D_803339020_7_7?", + "D_893966847_7_7?", + "D_169509213_7_7?", + "SRVCOV_COVSUMMARY_V1R0_7_7", + "D_980800222_V2_8_8!", + "D_366980310_8_8?", + "D_498462481_8_8?", + "D_694503437_8_8?", + "D_451163824_8_8?", + "D_705336878_8_8?", + "D_928530823_8_8?", + "D_108733102_8_8?", + "D_389465772_8_8?", + "D_775313030_8_8?", + "D_744230001_8_8?", + "D_782396371_8_8?", + "D_930944000_8_8?", + "D_984121390_8_8?", + "D_430166879_8_8?", + "D_179406442_8_8?", + "D_803339020_8_8?", + "D_893966847_8_8?", + "D_169509213_8_8?", + "SRVCOV_COVSUMMARY_V1R0_8_8", + "D_980800222_V2_9_9!", + "D_366980310_9_9?", + "D_498462481_9_9?", + "D_694503437_9_9?", + "D_451163824_9_9?", + "D_705336878_9_9?", + "D_928530823_9_9?", + "D_108733102_9_9?", + "D_389465772_9_9?", + "D_775313030_9_9?", + "D_744230001_9_9?", + "D_782396371_9_9?", + "D_930944000_9_9?", + "D_984121390_9_9?", + "D_430166879_9_9?", + "D_179406442_9_9?", + "D_803339020_9_9?", + "D_893966847_9_9?", + "D_169509213_9_9?", + "SRVCOV_COVSUMMARY_V1R0_9_9", + "D_980800222_V2_10_10!", + "D_366980310_10_10?", + "D_498462481_10_10?", + "D_694503437_10_10?", + "D_451163824_10_10?", + "D_705336878_10_10?", + "D_928530823_10_10?", + "D_108733102_10_10?", + "D_389465772_10_10?", + "D_775313030_10_10?", + "D_744230001_10_10?", + "D_782396371_10_10?", + "D_930944000_10_10?", + "D_984121390_10_10?", + "D_430166879_10_10?", + "D_179406442_10_10?", + "D_803339020_10_10?", + "D_893966847_10_10?", + "D_169509213_10_10?", + "SRVCOV_COVSUMMARY_V1R0_10_10", + "D_980800222_V2_11_11!", + "D_366980310_11_11?", + "D_498462481_11_11?", + "D_694503437_11_11?", + "D_451163824_11_11?", + "D_705336878_11_11?", + "D_928530823_11_11?", + "D_108733102_11_11?", + "D_389465772_11_11?", + "D_775313030_11_11?", + "D_744230001_11_11?", + "D_782396371_11_11?", + "D_930944000_11_11?", + "D_984121390_11_11?", + "D_430166879_11_11?", + "D_179406442_11_11?", + "D_803339020_11_11?", + "D_893966847_11_11?", + "D_169509213_11_11?", + "SRVCOV_COVSUMMARY_V1R0_11_11", + "D_980800222_V2_12_12!", + "D_366980310_12_12?", + "D_498462481_12_12?", + "D_694503437_12_12?", + "D_451163824_12_12?", + "D_705336878_12_12?", + "D_928530823_12_12?", + "D_108733102_12_12?", + "D_389465772_12_12?", + "D_775313030_12_12?", + "D_744230001_12_12?", + "D_782396371_12_12?", + "D_930944000_12_12?", + "D_984121390_12_12?", + "D_430166879_12_12?", + "D_179406442_12_12?", + "D_803339020_12_12?", + "D_893966847_12_12?", + "D_169509213_12_12?", + "SRVCOV_COVSUMMARY_V1R0_12_12", + "D_980800222_V2_13_13!", + "D_366980310_13_13?", + "D_498462481_13_13?", + "D_694503437_13_13?", + "D_451163824_13_13?", + "D_705336878_13_13?", + "D_928530823_13_13?", + "D_108733102_13_13?", + "D_389465772_13_13?", + "D_775313030_13_13?", + "D_744230001_13_13?", + "D_782396371_13_13?", + "D_930944000_13_13?", + "D_984121390_13_13?", + "D_430166879_13_13?", + "D_179406442_13_13?", + "D_803339020_13_13?", + "D_893966847_13_13?", + "D_169509213_13_13?", + "SRVCOV_COVSUMMARY_V1R0_13_13", + "D_980800222_V2_14_14!", + "D_366980310_14_14?", + "D_498462481_14_14?", + "D_694503437_14_14?", + "D_451163824_14_14?", + "D_705336878_14_14?", + "D_928530823_14_14?", + "D_108733102_14_14?", + "D_389465772_14_14?", + "D_775313030_14_14?", + "D_744230001_14_14?", + "D_782396371_14_14?", + "D_930944000_14_14?", + "D_984121390_14_14?", + "D_430166879_14_14?", + "D_179406442_14_14?", + "D_803339020_14_14?", + "D_893966847_14_14?", + "D_169509213_14_14?", + "SRVCOV_COVSUMMARY_V1R0_14_14", + "D_980800222_V2_15_15!", + "D_366980310_15_15?", + "D_498462481_15_15?", + "D_694503437_15_15?", + "D_451163824_15_15?", + "D_705336878_15_15?", + "D_928530823_15_15?", + "D_108733102_15_15?", + "D_389465772_15_15?", + "D_775313030_15_15?", + "D_744230001_15_15?", + "D_782396371_15_15?", + "D_930944000_15_15?", + "D_984121390_15_15?", + "D_430166879_15_15?", + "D_179406442_15_15?", + "D_803339020_15_15?", + "D_893966847_15_15?", + "D_169509213_15_15?", + "SRVCOV_COVSUMMARY_V1R0_15_15", + "D_980800222_V2_16_16!", + "D_366980310_16_16?", + "D_498462481_16_16?", + "D_694503437_16_16?", + "D_451163824_16_16?", + "D_705336878_16_16?", + "D_928530823_16_16?", + "D_108733102_16_16?", + "D_389465772_16_16?", + "D_775313030_16_16?", + "D_744230001_16_16?", + "D_782396371_16_16?", + "D_930944000_16_16?", + "D_984121390_16_16?", + "D_430166879_16_16?", + "D_179406442_16_16?", + "D_803339020_16_16?", + "D_893966847_16_16?", + "D_169509213_16_16?", + "SRVCOV_COVSUMMARY_V1R0_16_16", + "D_980800222_V2_17_17!", + "D_366980310_17_17?", + "D_498462481_17_17?", + "D_694503437_17_17?", + "D_451163824_17_17?", + "D_705336878_17_17?", + "D_928530823_17_17?", + "D_108733102_17_17?", + "D_389465772_17_17?", + "D_775313030_17_17?", + "D_744230001_17_17?", + "D_782396371_17_17?", + "D_930944000_17_17?", + "D_984121390_17_17?", + "D_430166879_17_17?", + "D_179406442_17_17?", + "D_803339020_17_17?", + "D_893966847_17_17?", + "D_169509213_17_17?", + "SRVCOV_COVSUMMARY_V1R0_17_17", + "D_980800222_V2_18_18!", + "D_366980310_18_18?", + "D_498462481_18_18?", + "D_694503437_18_18?", + "D_451163824_18_18?", + "D_705336878_18_18?", + "D_928530823_18_18?", + "D_108733102_18_18?", + "D_389465772_18_18?", + "D_775313030_18_18?", + "D_744230001_18_18?", + "D_782396371_18_18?", + "D_930944000_18_18?", + "D_984121390_18_18?", + "D_430166879_18_18?", + "D_179406442_18_18?", + "D_803339020_18_18?", + "D_893966847_18_18?", + "D_169509213_18_18?", + "SRVCOV_COVSUMMARY_V1R0_18_18", + "D_980800222_V2_19_19!", + "D_366980310_19_19?", + "D_498462481_19_19?", + "D_694503437_19_19?", + "D_451163824_19_19?", + "D_705336878_19_19?", + "D_928530823_19_19?", + "D_108733102_19_19?", + "D_389465772_19_19?", + "D_775313030_19_19?", + "D_744230001_19_19?", + "D_782396371_19_19?", + "D_930944000_19_19?", + "D_984121390_19_19?", + "D_430166879_19_19?", + "D_179406442_19_19?", + "D_803339020_19_19?", + "D_893966847_19_19?", + "D_169509213_19_19?", + "SRVCOV_COVSUMMARY_V1R0_19_19", + "D_980800222_V2_20_20!", + "D_366980310_20_20?", + "D_498462481_20_20?", + "D_694503437_20_20?", + "D_451163824_20_20?", + "D_705336878_20_20?", + "D_928530823_20_20?", + "D_108733102_20_20?", + "D_389465772_20_20?", + "D_775313030_20_20?", + "D_744230001_20_20?", + "D_782396371_20_20?", + "D_930944000_20_20?", + "D_984121390_20_20?", + "D_430166879_20_20?", + "D_179406442_20_20?", + "D_803339020_20_20?", + "D_893966847_20_20?", + "D_169509213_20_20?", + "SRVCOV_COVSUMMARY_V1R0_20_20", + "D_980800222_V2_21_21!", + "D_366980310_21_21?", + "D_498462481_21_21?", + "D_694503437_21_21?", + "D_451163824_21_21?", + "D_705336878_21_21?", + "D_928530823_21_21?", + "D_108733102_21_21?", + "D_389465772_21_21?", + "D_775313030_21_21?", + "D_744230001_21_21?", + "D_782396371_21_21?", + "D_930944000_21_21?", + "D_984121390_21_21?", + "D_430166879_21_21?", + "D_179406442_21_21?", + "D_803339020_21_21?", + "D_893966847_21_21?", + "D_169509213_21_21?", + "SRVCOV_COVSUMMARY_V1R0_21_21", + "D_980800222_V2_22_22!", + "D_366980310_22_22?", + "D_498462481_22_22?", + "D_694503437_22_22?", + "D_451163824_22_22?", + "D_705336878_22_22?", + "D_928530823_22_22?", + "D_108733102_22_22?", + "D_389465772_22_22?", + "D_775313030_22_22?", + "D_744230001_22_22?", + "D_782396371_22_22?", + "D_930944000_22_22?", + "D_984121390_22_22?", + "D_430166879_22_22?", + "D_179406442_22_22?", + "D_803339020_22_22?", + "D_893966847_22_22?", + "D_169509213_22_22?", + "SRVCOV_COVSUMMARY_V1R0_22_22", + "D_980800222_V2_23_23!", + "D_366980310_23_23?", + "D_498462481_23_23?", + "D_694503437_23_23?", + "D_451163824_23_23?", + "D_705336878_23_23?", + "D_928530823_23_23?", + "D_108733102_23_23?", + "D_389465772_23_23?", + "D_775313030_23_23?", + "D_744230001_23_23?", + "D_782396371_23_23?", + "D_930944000_23_23?", + "D_984121390_23_23?", + "D_430166879_23_23?", + "D_179406442_23_23?", + "D_803339020_23_23?", + "D_893966847_23_23?", + "D_169509213_23_23?", + "SRVCOV_COVSUMMARY_V1R0_23_23", + "D_980800222_V2_24_24!", + "D_366980310_24_24?", + "D_498462481_24_24?", + "D_694503437_24_24?", + "D_451163824_24_24?", + "D_705336878_24_24?", + "D_928530823_24_24?", + "D_108733102_24_24?", + "D_389465772_24_24?", + "D_775313030_24_24?", + "D_744230001_24_24?", + "D_782396371_24_24?", + "D_930944000_24_24?", + "D_984121390_24_24?", + "D_430166879_24_24?", + "D_179406442_24_24?", + "D_803339020_24_24?", + "D_893966847_24_24?", + "D_169509213_24_24?", + "SRVCOV_COVSUMMARY_V1R0_24_24", + "D_980800222_V2_25_25!", + "D_366980310_25_25?", + "D_498462481_25_25?", + "D_694503437_25_25?", + "D_451163824_25_25?", + "D_705336878_25_25?", + "D_928530823_25_25?", + "D_108733102_25_25?", + "D_389465772_25_25?", + "D_775313030_25_25?", + "D_744230001_25_25?", + "D_782396371_25_25?", + "D_930944000_25_25?", + "D_984121390_25_25?", + "D_430166879_25_25?", + "D_179406442_25_25?", + "D_803339020_25_25?", + "D_893966847_25_25?", + "D_169509213_25_25?", + "SRVCOV_COVSUMMARY_V1R0_25_25", + "END_OF_LOOP", + "COV19_SKIP", + "D_847578001", + "D_136730307", + "D_751358419", + "D_110872086?", + "D_591826144?", + "COV20_SKIP", + "D_114280729", + "COV20A17_SKIP", + "D_934384452?", + "D_273371161?", + "D_959877599?", + "COV23_SKIP", + "D_813989715", + "D_857165713", + "D_749956170", + "SRVCOV_COV25INTRO_V1R0", + "D_890156588_V2?", + "D_877074400_V2?", + "D_715581797_V2_1_1?", + "D_220055064_1_1?", + "SRVCOV_COV29_V1R0_1_1", + "D_715581797_V2_2_2?", + "D_220055064_2_2?", + "SRVCOV_COV29_V1R0_2_2", + "D_715581797_V2_3_3?", + "D_220055064_3_3?", + "SRVCOV_COV29_V1R0_3_3", + "D_715581797_V2_4_4?", + "D_220055064_4_4?", + "SRVCOV_COV29_V1R0_4_4", + "D_715581797_V2_5_5?", + "D_220055064_5_5?", + "SRVCOV_COV29_V1R0_5_5", + "D_715581797_V2_6_6?", + "D_220055064_6_6?", + "SRVCOV_COV29_V1R0_6_6", + "D_715581797_V2_7_7?", + "D_220055064_7_7?", + "SRVCOV_COV29_V1R0_7_7", + "D_715581797_V2_8_8?", + "D_220055064_8_8?", + "SRVCOV_COV29_V1R0_8_8", + "D_715581797_V2_9_9?", + "D_220055064_9_9?", + "SRVCOV_COV29_V1R0_9_9", + "D_715581797_V2_10_10?", + "D_220055064_10_10?", + "SRVCOV_COV29_V1R0_10_10", + "D_715581797_V2_11_11?", + "D_220055064_11_11?", + "SRVCOV_COV29_V1R0_11_11", + "D_715581797_V2_12_12?", + "D_220055064_12_12?", + "SRVCOV_COV29_V1R0_12_12", + "D_715581797_V2_13_13?", + "D_220055064_13_13?", + "SRVCOV_COV29_V1R0_13_13", + "D_715581797_V2_14_14?", + "D_220055064_14_14?", + "SRVCOV_COV29_V1R0_14_14", + "D_715581797_V2_15_15?", + "D_220055064_15_15?", + "SRVCOV_COV29_V1R0_15_15", + "D_715581797_V2_16_16?", + "D_220055064_16_16?", + "SRVCOV_COV29_V1R0_16_16", + "D_715581797_V2_17_17?", + "D_220055064_17_17?", + "SRVCOV_COV29_V1R0_17_17", + "D_715581797_V2_18_18?", + "D_220055064_18_18?", + "SRVCOV_COV29_V1R0_18_18", + "D_715581797_V2_19_19?", + "D_220055064_19_19?", + "SRVCOV_COV29_V1R0_19_19", + "D_715581797_V2_20_20?", + "D_220055064_20_20?", + "SRVCOV_COV29_V1R0_20_20", + "D_715581797_V2_21_21?", + "D_220055064_21_21?", + "SRVCOV_COV29_V1R0_21_21", + "D_715581797_V2_22_22?", + "D_220055064_22_22?", + "SRVCOV_COV29_V1R0_22_22", + "D_715581797_V2_23_23?", + "D_220055064_23_23?", + "SRVCOV_COV29_V1R0_23_23", + "D_715581797_V2_24_24?", + "D_220055064_24_24?", + "SRVCOV_COV29_V1R0_24_24", + "D_715581797_V2_25_25?", + "D_220055064_25_25?", + "SRVCOV_COV29_V1R0_25_25", + "END_OF_LOOP", + "END" + ], + "responseControlsByType": { + "checkbox": 475, + "month": 50, + "number": 129, + "radio": 1265, + "text": 51 + }, + "explicitTransitions": { + "targets": [ + "COV23_SKIP", + "D_694503437_1_1", + "D_498462481_1_1", + "SRVCOV_COVSUMMARY_V1R0_1_1", + "D_984121390_1_1", + "D_179406442_1_1", + "D_893966847_1_1", + "_CONTINUE1_1_1", + "D_694503437_2_2", + "D_498462481_2_2", + "SRVCOV_COVSUMMARY_V1R0_2_2", + "D_984121390_2_2", + "D_179406442_2_2", + "D_893966847_2_2", + "_CONTINUE1_2_2", + "D_694503437_3_3", + "D_498462481_3_3", + "SRVCOV_COVSUMMARY_V1R0_3_3", + "D_984121390_3_3", + "D_179406442_3_3", + "D_893966847_3_3", + "_CONTINUE1_3_3", + "D_694503437_4_4", + "D_498462481_4_4", + "SRVCOV_COVSUMMARY_V1R0_4_4", + "D_984121390_4_4", + "D_179406442_4_4", + "D_893966847_4_4", + "_CONTINUE1_4_4", + "D_694503437_5_5", + "D_498462481_5_5", + "SRVCOV_COVSUMMARY_V1R0_5_5", + "D_984121390_5_5", + "D_179406442_5_5", + "D_893966847_5_5", + "_CONTINUE1_5_5", + "D_694503437_6_6", + "D_498462481_6_6", + "SRVCOV_COVSUMMARY_V1R0_6_6", + "D_984121390_6_6", + "D_179406442_6_6", + "D_893966847_6_6", + "_CONTINUE1_6_6", + "D_694503437_7_7", + "D_498462481_7_7", + "SRVCOV_COVSUMMARY_V1R0_7_7", + "D_984121390_7_7", + "D_179406442_7_7", + "D_893966847_7_7", + "_CONTINUE1_7_7", + "D_694503437_8_8", + "D_498462481_8_8", + "SRVCOV_COVSUMMARY_V1R0_8_8", + "D_984121390_8_8", + "D_179406442_8_8", + "D_893966847_8_8", + "_CONTINUE1_8_8", + "D_694503437_9_9", + "D_498462481_9_9", + "SRVCOV_COVSUMMARY_V1R0_9_9", + "D_984121390_9_9", + "D_179406442_9_9", + "D_893966847_9_9", + "_CONTINUE1_9_9", + "D_694503437_10_10", + "D_498462481_10_10", + "SRVCOV_COVSUMMARY_V1R0_10_10", + "D_984121390_10_10", + "D_179406442_10_10", + "D_893966847_10_10", + "_CONTINUE1_10_10", + "D_694503437_11_11", + "D_498462481_11_11", + "SRVCOV_COVSUMMARY_V1R0_11_11", + "D_984121390_11_11", + "D_179406442_11_11", + "D_893966847_11_11", + "_CONTINUE1_11_11", + "D_694503437_12_12", + "D_498462481_12_12", + "SRVCOV_COVSUMMARY_V1R0_12_12", + "D_984121390_12_12", + "D_179406442_12_12", + "D_893966847_12_12", + "_CONTINUE1_12_12", + "D_694503437_13_13", + "D_498462481_13_13", + "SRVCOV_COVSUMMARY_V1R0_13_13", + "D_984121390_13_13", + "D_179406442_13_13", + "D_893966847_13_13", + "_CONTINUE1_13_13", + "D_694503437_14_14", + "D_498462481_14_14", + "SRVCOV_COVSUMMARY_V1R0_14_14", + "D_984121390_14_14", + "D_179406442_14_14", + "D_893966847_14_14", + "_CONTINUE1_14_14", + "D_694503437_15_15", + "D_498462481_15_15", + "SRVCOV_COVSUMMARY_V1R0_15_15", + "D_984121390_15_15", + "D_179406442_15_15", + "D_893966847_15_15", + "_CONTINUE1_15_15", + "D_694503437_16_16", + "D_498462481_16_16", + "SRVCOV_COVSUMMARY_V1R0_16_16", + "D_984121390_16_16", + "D_179406442_16_16", + "D_893966847_16_16", + "_CONTINUE1_16_16", + "D_694503437_17_17", + "D_498462481_17_17", + "SRVCOV_COVSUMMARY_V1R0_17_17", + "D_984121390_17_17", + "D_179406442_17_17", + "D_893966847_17_17", + "_CONTINUE1_17_17", + "D_694503437_18_18", + "D_498462481_18_18", + "SRVCOV_COVSUMMARY_V1R0_18_18", + "D_984121390_18_18", + "D_179406442_18_18", + "D_893966847_18_18", + "_CONTINUE1_18_18", + "D_694503437_19_19", + "D_498462481_19_19", + "SRVCOV_COVSUMMARY_V1R0_19_19", + "D_984121390_19_19", + "D_179406442_19_19", + "D_893966847_19_19", + "_CONTINUE1_19_19", + "D_694503437_20_20", + "D_498462481_20_20", + "SRVCOV_COVSUMMARY_V1R0_20_20", + "D_984121390_20_20", + "D_179406442_20_20", + "D_893966847_20_20", + "_CONTINUE1_20_20", + "D_694503437_21_21", + "D_498462481_21_21", + "SRVCOV_COVSUMMARY_V1R0_21_21", + "D_984121390_21_21", + "D_179406442_21_21", + "D_893966847_21_21", + "_CONTINUE1_21_21", + "D_694503437_22_22", + "D_498462481_22_22", + "SRVCOV_COVSUMMARY_V1R0_22_22", + "D_984121390_22_22", + "D_179406442_22_22", + "D_893966847_22_22", + "_CONTINUE1_22_22", + "D_694503437_23_23", + "D_498462481_23_23", + "SRVCOV_COVSUMMARY_V1R0_23_23", + "D_984121390_23_23", + "D_179406442_23_23", + "D_893966847_23_23", + "_CONTINUE1_23_23", + "D_694503437_24_24", + "D_498462481_24_24", + "SRVCOV_COVSUMMARY_V1R0_24_24", + "D_984121390_24_24", + "D_179406442_24_24", + "D_893966847_24_24", + "_CONTINUE1_24_24", + "D_694503437_25_25", + "D_498462481_25_25", + "SRVCOV_COVSUMMARY_V1R0_25_25", + "D_984121390_25_25", + "D_179406442_25_25", + "D_893966847_25_25", + "_CONTINUE1_25_25", + "COV20_SKIP", + "D_591826144", + "COV20A17_SKIP", + "SRVCOV_COV25INTRO_V1R0", + "END" + ], + "byKind": { + "default": 30, + "no-response": 153, + "response": 357 + }, + "byResolution": { + "exact": 512, + "terminal": 3, + "virtual-loop": 25 + }, + "triggerTypes": { + "hidden": 183, + "radio": 357 + }, + "triggerValues": [ + "104430631", + "178420302", + "353358909", + "317811347", + "707601969" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "greaterThanOrEqual(D_860011428,1)", + "exists('D_686508359_1_1')", + "equals(D_366980310_1_1,353358909)", + "equals(D_366980310_1_1,104430631)", + "equals(D_366980310_1_1,178420302)", + "equals(D_694503437_1_1,353358909)", + "equals(D_694503437_1_1,104430631)", + "doesNotEqual(D_694503437_1_1,104430631)", + "equals(D_775313030_1_1,353358909)", + "equals(D_775313030_1_1,104430631)", + "equals(D_775313030_1_1,178420302)", + "greaterThanOrEqual(D_860011428,2)", + "exists('D_686508359_2_2')", + "equals(D_366980310_2_2,353358909)", + "equals(D_366980310_2_2,104430631)", + "equals(D_366980310_2_2,178420302)", + "equals(D_694503437_2_2,353358909)", + "equals(D_694503437_2_2,104430631)", + "doesNotEqual(D_694503437_2_2,104430631)", + "equals(D_775313030_2_2,353358909)", + "equals(D_775313030_2_2,104430631)", + "equals(D_775313030_2_2,178420302)", + "greaterThanOrEqual(D_860011428,3)", + "exists('D_686508359_3_3')", + "equals(D_366980310_3_3,353358909)", + "equals(D_366980310_3_3,104430631)", + "equals(D_366980310_3_3,178420302)", + "equals(D_694503437_3_3,353358909)", + "equals(D_694503437_3_3,104430631)", + "doesNotEqual(D_694503437_3_3,104430631)", + "equals(D_775313030_3_3,353358909)", + "equals(D_775313030_3_3,104430631)", + "equals(D_775313030_3_3,178420302)", + "greaterThanOrEqual(D_860011428,4)", + "exists('D_686508359_4_4')", + "equals(D_366980310_4_4,353358909)", + "equals(D_366980310_4_4,104430631)", + "equals(D_366980310_4_4,178420302)", + "equals(D_694503437_4_4,353358909)", + "equals(D_694503437_4_4,104430631)", + "doesNotEqual(D_694503437_4_4,104430631)", + "equals(D_775313030_4_4,353358909)", + "equals(D_775313030_4_4,104430631)", + "equals(D_775313030_4_4,178420302)", + "greaterThanOrEqual(D_860011428,5)", + "exists('D_686508359_5_5')", + "equals(D_366980310_5_5,353358909)", + "equals(D_366980310_5_5,104430631)", + "equals(D_366980310_5_5,178420302)", + "equals(D_694503437_5_5,353358909)", + "equals(D_694503437_5_5,104430631)", + "doesNotEqual(D_694503437_5_5,104430631)", + "equals(D_775313030_5_5,353358909)", + "equals(D_775313030_5_5,104430631)", + "equals(D_775313030_5_5,178420302)", + "greaterThanOrEqual(D_860011428,6)", + "exists('D_686508359_6_6')", + "equals(D_366980310_6_6,353358909)", + "equals(D_366980310_6_6,104430631)", + "equals(D_366980310_6_6,178420302)", + "equals(D_694503437_6_6,353358909)", + "equals(D_694503437_6_6,104430631)", + "doesNotEqual(D_694503437_6_6,104430631)", + "equals(D_775313030_6_6,353358909)", + "equals(D_775313030_6_6,104430631)", + "equals(D_775313030_6_6,178420302)", + "greaterThanOrEqual(D_860011428,7)", + "exists('D_686508359_7_7')", + "equals(D_366980310_7_7,353358909)", + "equals(D_366980310_7_7,104430631)", + "equals(D_366980310_7_7,178420302)", + "equals(D_694503437_7_7,353358909)", + "equals(D_694503437_7_7,104430631)", + "doesNotEqual(D_694503437_7_7,104430631)", + "equals(D_775313030_7_7,353358909)", + "equals(D_775313030_7_7,104430631)", + "equals(D_775313030_7_7,178420302)", + "greaterThanOrEqual(D_860011428,8)", + "exists('D_686508359_8_8')", + "equals(D_366980310_8_8,353358909)", + "equals(D_366980310_8_8,104430631)", + "equals(D_366980310_8_8,178420302)", + "equals(D_694503437_8_8,353358909)", + "equals(D_694503437_8_8,104430631)", + "doesNotEqual(D_694503437_8_8,104430631)", + "equals(D_775313030_8_8,353358909)", + "equals(D_775313030_8_8,104430631)", + "equals(D_775313030_8_8,178420302)", + "greaterThanOrEqual(D_860011428,9)", + "exists('D_686508359_9_9')", + "equals(D_366980310_9_9,353358909)", + "equals(D_366980310_9_9,104430631)", + "equals(D_366980310_9_9,178420302)", + "equals(D_694503437_9_9,353358909)", + "equals(D_694503437_9_9,104430631)", + "doesNotEqual(D_694503437_9_9,104430631)", + "equals(D_775313030_9_9,353358909)", + "equals(D_775313030_9_9,104430631)", + "equals(D_775313030_9_9,178420302)", + "greaterThanOrEqual(D_860011428,10)", + "exists('D_686508359_10_10')", + "equals(D_366980310_10_10,353358909)", + "equals(D_366980310_10_10,104430631)", + "equals(D_366980310_10_10,178420302)", + "equals(D_694503437_10_10,353358909)", + "equals(D_694503437_10_10,104430631)", + "doesNotEqual(D_694503437_10_10,104430631)", + "equals(D_775313030_10_10,353358909)", + "equals(D_775313030_10_10,104430631)", + "equals(D_775313030_10_10,178420302)", + "greaterThanOrEqual(D_860011428,11)", + "exists('D_686508359_11_11')", + "equals(D_366980310_11_11,353358909)", + "equals(D_366980310_11_11,104430631)", + "equals(D_366980310_11_11,178420302)", + "equals(D_694503437_11_11,353358909)", + "equals(D_694503437_11_11,104430631)", + "doesNotEqual(D_694503437_11_11,104430631)", + "equals(D_775313030_11_11,353358909)", + "equals(D_775313030_11_11,104430631)", + "equals(D_775313030_11_11,178420302)", + "greaterThanOrEqual(D_860011428,12)", + "exists('D_686508359_12_12')", + "equals(D_366980310_12_12,353358909)", + "equals(D_366980310_12_12,104430631)", + "equals(D_366980310_12_12,178420302)", + "equals(D_694503437_12_12,353358909)", + "equals(D_694503437_12_12,104430631)", + "doesNotEqual(D_694503437_12_12,104430631)", + "equals(D_775313030_12_12,353358909)", + "equals(D_775313030_12_12,104430631)", + "equals(D_775313030_12_12,178420302)", + "greaterThanOrEqual(D_860011428,13)", + "exists('D_686508359_13_13')", + "equals(D_366980310_13_13,353358909)", + "equals(D_366980310_13_13,104430631)", + "equals(D_366980310_13_13,178420302)", + "equals(D_694503437_13_13,353358909)", + "equals(D_694503437_13_13,104430631)", + "doesNotEqual(D_694503437_13_13,104430631)", + "equals(D_775313030_13_13,353358909)", + "equals(D_775313030_13_13,104430631)", + "equals(D_775313030_13_13,178420302)", + "greaterThanOrEqual(D_860011428,14)", + "exists('D_686508359_14_14')", + "equals(D_366980310_14_14,353358909)", + "equals(D_366980310_14_14,104430631)", + "equals(D_366980310_14_14,178420302)", + "equals(D_694503437_14_14,353358909)", + "equals(D_694503437_14_14,104430631)", + "doesNotEqual(D_694503437_14_14,104430631)", + "equals(D_775313030_14_14,353358909)", + "equals(D_775313030_14_14,104430631)", + "equals(D_775313030_14_14,178420302)", + "greaterThanOrEqual(D_860011428,15)", + "exists('D_686508359_15_15')", + "equals(D_366980310_15_15,353358909)", + "equals(D_366980310_15_15,104430631)", + "equals(D_366980310_15_15,178420302)", + "equals(D_694503437_15_15,353358909)", + "equals(D_694503437_15_15,104430631)", + "doesNotEqual(D_694503437_15_15,104430631)", + "equals(D_775313030_15_15,353358909)", + "equals(D_775313030_15_15,104430631)", + "equals(D_775313030_15_15,178420302)", + "greaterThanOrEqual(D_860011428,16)", + "exists('D_686508359_16_16')", + "equals(D_366980310_16_16,353358909)", + "equals(D_366980310_16_16,104430631)", + "equals(D_366980310_16_16,178420302)", + "equals(D_694503437_16_16,353358909)", + "equals(D_694503437_16_16,104430631)", + "doesNotEqual(D_694503437_16_16,104430631)", + "equals(D_775313030_16_16,353358909)", + "equals(D_775313030_16_16,104430631)", + "equals(D_775313030_16_16,178420302)", + "greaterThanOrEqual(D_860011428,17)", + "exists('D_686508359_17_17')", + "equals(D_366980310_17_17,353358909)", + "equals(D_366980310_17_17,104430631)", + "equals(D_366980310_17_17,178420302)", + "equals(D_694503437_17_17,353358909)", + "equals(D_694503437_17_17,104430631)", + "doesNotEqual(D_694503437_17_17,104430631)", + "equals(D_775313030_17_17,353358909)", + "equals(D_775313030_17_17,104430631)", + "equals(D_775313030_17_17,178420302)", + "greaterThanOrEqual(D_860011428,18)", + "exists('D_686508359_18_18')", + "equals(D_366980310_18_18,353358909)", + "equals(D_366980310_18_18,104430631)", + "equals(D_366980310_18_18,178420302)", + "equals(D_694503437_18_18,353358909)", + "equals(D_694503437_18_18,104430631)", + "doesNotEqual(D_694503437_18_18,104430631)", + "equals(D_775313030_18_18,353358909)", + "equals(D_775313030_18_18,104430631)", + "equals(D_775313030_18_18,178420302)", + "greaterThanOrEqual(D_860011428,19)", + "exists('D_686508359_19_19')", + "equals(D_366980310_19_19,353358909)", + "equals(D_366980310_19_19,104430631)", + "equals(D_366980310_19_19,178420302)", + "equals(D_694503437_19_19,353358909)", + "equals(D_694503437_19_19,104430631)", + "doesNotEqual(D_694503437_19_19,104430631)", + "equals(D_775313030_19_19,353358909)", + "equals(D_775313030_19_19,104430631)", + "equals(D_775313030_19_19,178420302)", + "greaterThanOrEqual(D_860011428,20)", + "exists('D_686508359_20_20')", + "equals(D_366980310_20_20,353358909)", + "equals(D_366980310_20_20,104430631)", + "equals(D_366980310_20_20,178420302)", + "equals(D_694503437_20_20,353358909)", + "equals(D_694503437_20_20,104430631)", + "doesNotEqual(D_694503437_20_20,104430631)", + "equals(D_775313030_20_20,353358909)", + "equals(D_775313030_20_20,104430631)", + "equals(D_775313030_20_20,178420302)", + "greaterThanOrEqual(D_860011428,21)", + "exists('D_686508359_21_21')", + "equals(D_366980310_21_21,353358909)", + "equals(D_366980310_21_21,104430631)", + "equals(D_366980310_21_21,178420302)", + "equals(D_694503437_21_21,353358909)", + "equals(D_694503437_21_21,104430631)", + "doesNotEqual(D_694503437_21_21,104430631)", + "equals(D_775313030_21_21,353358909)", + "equals(D_775313030_21_21,104430631)", + "equals(D_775313030_21_21,178420302)", + "greaterThanOrEqual(D_860011428,22)", + "exists('D_686508359_22_22')", + "equals(D_366980310_22_22,353358909)", + "equals(D_366980310_22_22,104430631)", + "equals(D_366980310_22_22,178420302)", + "equals(D_694503437_22_22,353358909)", + "equals(D_694503437_22_22,104430631)", + "doesNotEqual(D_694503437_22_22,104430631)", + "equals(D_775313030_22_22,353358909)", + "equals(D_775313030_22_22,104430631)", + "equals(D_775313030_22_22,178420302)", + "greaterThanOrEqual(D_860011428,23)", + "exists('D_686508359_23_23')", + "equals(D_366980310_23_23,353358909)", + "equals(D_366980310_23_23,104430631)", + "equals(D_366980310_23_23,178420302)", + "equals(D_694503437_23_23,353358909)", + "equals(D_694503437_23_23,104430631)", + "doesNotEqual(D_694503437_23_23,104430631)", + "equals(D_775313030_23_23,353358909)", + "equals(D_775313030_23_23,104430631)", + "equals(D_775313030_23_23,178420302)", + "greaterThanOrEqual(D_860011428,24)", + "exists('D_686508359_24_24')", + "equals(D_366980310_24_24,353358909)", + "equals(D_366980310_24_24,104430631)", + "equals(D_366980310_24_24,178420302)", + "equals(D_694503437_24_24,353358909)", + "equals(D_694503437_24_24,104430631)", + "doesNotEqual(D_694503437_24_24,104430631)", + "equals(D_775313030_24_24,353358909)", + "equals(D_775313030_24_24,104430631)", + "equals(D_775313030_24_24,178420302)", + "greaterThanOrEqual(D_860011428,25)", + "exists('D_686508359_25_25')", + "equals(D_366980310_25_25,353358909)", + "equals(D_366980310_25_25,104430631)", + "equals(D_366980310_25_25,178420302)", + "equals(D_694503437_25_25,353358909)", + "equals(D_694503437_25_25,104430631)", + "doesNotEqual(D_694503437_25_25,104430631)", + "equals(D_775313030_25_25,353358909)", + "equals(D_775313030_25_25,104430631)", + "equals(D_775313030_25_25,178420302)", + "and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(doesNotEqual(D_694503437_1_1,353358909),doesNotEqual(D_694503437_2_2,353358909)),doesNotEqual(D_694503437_3_3,353358909)),doesNotEqual(D_694503437_4_4,353358909)),doesNotEqual(D_694503437_5_5,353358909)),doesNotEqual(D_694503437_6_6,353358909)),doesNotEqual(D_694503437_7_7,353358909)),doesNotEqual(D_694503437_8_8,353358909)),doesNotEqual(D_694503437_9_9,353358909)),doesNotEqual(D_694503437_10_10,353358909)),doesNotEqual(D_694503437_11_11,353358909)),doesNotEqual(D_694503437_12_12,353358909)),doesNotEqual(D_694503437_13_13,353358909)),doesNotEqual(D_694503437_14_14,353358909)),doesNotEqual(D_694503437_15_15,353358909)),doesNotEqual(D_694503437_16_16,353358909)),doesNotEqual(D_694503437_17_17,353358909)),doesNotEqual(D_694503437_18_18,353358909)),doesNotEqual(D_694503437_19_19,353358909)),doesNotEqual(D_694503437_20_20,353358909)),doesNotEqual(D_694503437_21_21,353358909)),doesNotEqual(D_694503437_22_22,353358909)),doesNotEqual(D_694503437_23_23,353358909)),doesNotEqual(D_694503437_24_24,353358909)),doesNotEqual(D_694503437_25_25,353358909))", + "or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(equals(D_694503437_1_1,353358909),equals(D_694503437_2_2,353358909)),equals(D_694503437_3_3,353358909)),equals(D_694503437_4_4,353358909)),equals(D_694503437_5_5,353358909)),equals(D_694503437_6_6,353358909)),equals(D_694503437_7_7,353358909)),equals(D_694503437_8_8,353358909)),equals(D_694503437_9_9,353358909)),equals(D_694503437_10_10,353358909)),equals(D_694503437_11_11,353358909)),equals(D_694503437_12_12,353358909)),equals(D_694503437_13_13,353358909)),equals(D_694503437_14_14,353358909)),equals(D_694503437_15_15,353358909)),equals(D_694503437_16_16,353358909)),equals(D_694503437_17_17,353358909)),equals(D_694503437_18_18,353358909)),equals(D_694503437_19_19,353358909)),equals(D_694503437_20_20,353358909)),equals(D_694503437_21_21,353358909)),equals(D_694503437_22_22,353358909)),equals(D_694503437_23_23,353358909)),equals(D_694503437_24_24,353358909)),equals(D_694503437_25_25,353358909))", + "displayif=valueIsOneOf(\"D_110872086\",707601969) or valueLength(\"D_637540387\")>0", + "valueIsOneOf('D_110872086',707601969) or valueLength('D_637540387')>0", + "doesNotExist('D_637540387')", + "noneSelected(\"D_488415137_0\",\"D_488415137_1\",\"D_167695804_0\",\"D_167695804_1\",\"D_730334054_0\",\"D_730334054_1\",\"D_215996690_0\",\"D_215996690_1\",\"D_462737492_0\",\"D_462737492_1\",\"D_469675296_0\",\"D_469675296_1\",\"D_962475128_0\",\"D_962475128_1\",\"D_989576239_0\",\"D_989576239_1\",\"D_338613869_0\",\"D_338613869_1\",\"D_126794793_0\",\"D_126794793_1\",\"D_218793117_0\",\"D_218793117_1\",\"D_524096053_0\",\"D_524096053_1\",\"D_814101706_0\",\"D_814101706_1\",\"D_635026188_0\",\"D_635026188_1\",\"D_238135048_0\",\"D_238135048_1\",\"D_632714520_0\",\"D_632714520_1\")", + "someSelected(\"D_488415137_0\",\"D_488415137_1\",\"D_167695804_0\",\"D_167695804_1\",\"D_730334054_0\",\"D_730334054_1\",\"D_215996690_0\",\"D_215996690_1\",\"D_462737492_0\",\"D_462737492_1\",\"D_469675296_0\",\"D_469675296_1\",\"D_962475128_0\",\"D_962475128_1\",\"D_989576239_0\",\"D_989576239_1\",\"D_338613869_0\",\"D_338613869_1\",\"D_126794793_0\",\"D_126794793_1\",\"D_218793117_0\",\"D_218793117_1\",\"D_524096053_0\",\"SRVCOV_COV19C1_V1R0_1,1\",\"D_814101706_0\",\"D_814101706_1\",\"D_635026188_0\",\"D_238135048_0\",\"D_238135048_1\",\"D_632714520_0\",\"D_632714520_1", + "someSelected(%22D_488415137_0%22%2C%22D_488415137_1%22)", + "someSelected(%22D_730334054_0%22%2C%22D_730334054_1%22)", + "someSelected(%22D_215996690_0%22%2C%22D_215996690_1%22)", + "someSelected(%22D_462737492_0%22%2C%22D_462737492_1%22)", + "someSelected(%22D_469675296_0%22%2C%22D_469675296_1%22)", + "someSelected(%22D_167695804_0%22%2C%22D_167695804_1%22)", + "someSelected(%22D_524096053_0%22%2C%22D_524096053_1%22)", + "someSelected(%22D_814101706_0%22%2C%22D_814101706_1%22)", + "someSelected(%22D_962475128_0%22%2C%22D_962475128_1%22)", + "someSelected(%22D_989576239_0%22%2C%22D_989576239_1%22)", + "someSelected(%22D_338613869_0%22%2C%22D_338613869_1%22)", + "someSelected(%22D_126794793_0%22%2C%22D_126794793_1%22)", + "someSelected(%22D_218793117_0%22%2C%22D_218793117_1%22)", + "someSelected(%22D_635026188_0%22%2C%22D_635026188_1%22)", + "someSelected(%22D_238135048_0%22%2C%22D_238135048_1%22)", + "someSelected(%22D_632714520_0%22%2C%22D_632714520_1%22)", + "doesNotEqual(D_110872086,707601969)", + "equals(D_110872086,707601969)", + "exists('D_637540387')", + "and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(doesNotEqual(D_494226443,104430631),doesNotEqual(D_494226443,178420302)),doesNotEqual(isDefined(D_494226443,-1),-1)),doesNotEqual(D_498462481_1_1,104430631)),doesNotEqual(D_694503437_1_1,104430631)),doesNotEqual(D_498462481_2_2,104430631)),doesNotEqual(D_694503437_2_2,104430631)),doesNotEqual(D_498462481_3_3,104430631)),doesNotEqual(D_694503437_3_3,104430631)),doesNotEqual(D_498462481_4_4,104430631)),doesNotEqual(D_694503437_4_4,104430631)),doesNotEqual(D_498462481_5_5,104430631)),doesNotEqual(D_694503437_5_5,104430631)),doesNotEqual(D_498462481_6_6,104430631)),doesNotEqual(D_694503437_6_6,104430631)),doesNotEqual(D_498462481_7_7,104430631)),doesNotEqual(D_694503437_7_7,104430631)),doesNotEqual(D_498462481_8_8,104430631)),doesNotEqual(D_694503437_8_8,104430631)),doesNotEqual(D_498462481_9_9,104430631)),doesNotEqual(D_694503437_9_9,104430631)),doesNotEqual(D_498462481_10_10,104430631)),doesNotEqual(D_694503437_10_10,104430631)),doesNotEqual(D_498462481_11_11,104430631)),doesNotEqual(D_694503437_11_11,104430631)),doesNotEqual(D_498462481_12_12,104430631)),doesNotEqual(D_694503437_12_12,104430631)),doesNotEqual(D_498462481_13_13,104430631)),doesNotEqual(D_694503437_13_13,104430631)),doesNotEqual(D_498462481_14_14,104430631)),doesNotEqual(D_694503437_14_14,104430631)),doesNotEqual(D_498462481_15_15,104430631)),doesNotEqual(D_694503437_15_15,104430631)),doesNotEqual(D_498462481_16_16,104430631)),doesNotEqual(D_694503437_16_16,104430631)),doesNotEqual(D_498462481_17_17,104430631)),doesNotEqual(D_694503437_17_17,104430631)),doesNotEqual(D_498462481_18_18,104430631)),doesNotEqual(D_694503437_18_18,104430631)),doesNotEqual(D_498462481_19_19,104430631)),doesNotEqual(D_694503437_19_19,104430631)),doesNotEqual(D_498462481_20_20,104430631)),doesNotEqual(D_694503437_20_20,104430631)),doesNotEqual(D_498462481_21_21,104430631)),doesNotEqual(D_694503437_21_21,104430631)),doesNotEqual(D_498462481_22_22,104430631)),doesNotEqual(D_694503437_22_22,104430631)),doesNotEqual(D_498462481_23_23,104430631)),doesNotEqual(D_694503437_23_23,104430631)),doesNotEqual(D_498462481_24_24,104430631)),doesNotEqual(D_694503437_24_24,104430631)),doesNotEqual(D_498462481_25_25,104430631)),doesNotEqual(D_694503437_25_25,104430631))", + "or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(equals(D_494226443,104430631),equals(D_494226443,178420302)),equals(isDefined(D_494226443,-1),-1)),equals(D_498462481_1_1,104430631)),equals(D_694503437_1_1,104430631)),equals(D_498462481_2_2,104430631)),equals(D_694503437_2_2,104430631)),equals(D_498462481_3_3,104430631)),equals(D_694503437_3_3,104430631)),equals(D_498462481_4_4,104430631)),equals(D_694503437_4_4,104430631)),equals(D_498462481_5_5,104430631)),equals(D_694503437_5_5,104430631)),equals(D_498462481_6_6,104430631)),equals(D_694503437_6_6,104430631)),equals(D_498462481_7_7,104430631)),equals(D_694503437_7_7,104430631)),equals(D_498462481_8_8,104430631)),equals(D_694503437_8_8,104430631)),equals(D_498462481_9_9,104430631)),equals(D_694503437_9_9,104430631)),equals(D_498462481_10_10,104430631)),equals(D_694503437_10_10,104430631)),equals(D_498462481_11_11,104430631)),equals(D_694503437_11_11,104430631)),equals(D_498462481_12_12,104430631)),equals(D_694503437_12_12,104430631)),equals(D_498462481_13_13,104430631)),equals(D_694503437_13_13,104430631)),equals(D_498462481_14_14,104430631)),equals(D_694503437_14_14,104430631)),equals(D_498462481_15_15,104430631)),equals(D_694503437_15_15,104430631)),equals(D_498462481_16_16,104430631)),equals(D_694503437_16_16,104430631)),equals(D_498462481_17_17,104430631)),equals(D_694503437_17_17,104430631)),equals(D_498462481_18_18,104430631)),equals(D_694503437_18_18,104430631)),equals(D_498462481_19_19,104430631)),equals(D_694503437_19_19,104430631)),equals(D_498462481_20_20,104430631)),equals(D_694503437_20_20,104430631)),equals(D_498462481_21_21,104430631)),equals(D_694503437_21_21,104430631)),equals(D_498462481_22_22,104430631)),equals(D_694503437_22_22,104430631)),equals(D_498462481_23_23,104430631)),equals(D_694503437_23_23,104430631)),equals(D_498462481_24_24,104430631)),equals(D_694503437_24_24,104430631)),equals(D_498462481_25_25,104430631)),equals(D_694503437_25_25,104430631))", + "someSelected(\"D_874168085_0\",\"D_874168085_1\",\"D_283112988_0\",\"D_283112988_1\",\"D_580629349_0\",\"D_580629349_1\",\"D_151327643_0\",\"D_151327643_1\",\"D_440872808_0\",\"D_440872808_1\",\"D_874223830_0\",\"D_874223830_1\",\"D_847529903_0\",\"D_847529903_1\",\"D_219358831_0\",\"D_219358831_1\",\"D_636367178_0\",\"D_636367178_1\",\"D_243443780_0\",\"D_243443780_1\",\"D_357462273_0\",\"D_357462273_1\",\"D_638380747_0\",\"D_638380747_1\",\"D_187399900_0\",\"D_187399900_1\")", + "someSelected(%22D_874168085_0%22%2C%22D_874168085_1%22)", + "someSelected(%22D_283112988_0%22%2C%22D_283112988_1%22)", + "someSelected(%22D_580629349_0%22%2C%22D_580629349_1%22)", + "someSelected(%22D_151327643_0%22%2C%22D_151327643_1%22)", + "someSelected(%22D_440872808_0%22%2C%22D_440872808_1%22)", + "someSelected(%22D_874223830_0%22%2C%22D_874223830_1%22)", + "someSelected(%22D_847529903_0%22%2C%22D_847529903_1%22)", + "someSelected(%22D_219358831_0%22%2C%22D_219358831_1%22)", + "someSelected(%22D_636367178_0%22%2C%22D_636367178_1%22)", + "someSelected(%22D_243443780_0%22%2C%22D_243443780_1%22)", + "someSelected(%22D_357462273_0%22%2C%22D_357462273_1%22)", + "someSelected(%22D_638380747_0%22%2C%22D_638380747_1%22)", + "someSelected(%22D_187399900_0%22%2C%22D_187399900_1%22)", + "greaterThanOrEqual(D_877074400_V2,1)", + "equals(D_220055064_1_1,661871565)", + "equals(D_220055064_1_1,657978450)", + "equals(D_220055064_1_1,411943417)", + "equals(D_220055064_1_1,113838601)", + "equals(D_220055064_1_1,503154121)", + "valueIsOneOf('D_220055064_1_1',807835037) or valueLength('D_395747093_1_1')>0", + "equals(D_220055064_1_1,178420302)", + "greaterThanOrEqual(D_877074400_V2,2)", + "equals(D_220055064_2_2,661871565)", + "equals(D_220055064_2_2,657978450)", + "equals(D_220055064_2_2,411943417)", + "equals(D_220055064_2_2,113838601)", + "equals(D_220055064_2_2,503154121)", + "valueIsOneOf('D_220055064_2_2',807835037) or valueLength('D_395747093_2_2')>0", + "equals(D_220055064_2_2,178420302)", + "greaterThanOrEqual(D_877074400_V2,3)", + "equals(D_220055064_3_3,661871565)", + "equals(D_220055064_3_3,657978450)", + "equals(D_220055064_3_3,411943417)", + "equals(D_220055064_3_3,113838601)", + "equals(D_220055064_3_3,503154121)", + "valueIsOneOf('D_220055064_3_3',807835037) or valueLength('D_395747093_3_3')>0", + "equals(D_220055064_3_3,178420302)", + "greaterThanOrEqual(D_877074400_V2,4)", + "equals(D_220055064_4_4,661871565)", + "equals(D_220055064_4_4,657978450)", + "equals(D_220055064_4_4,411943417)", + "equals(D_220055064_4_4,113838601)", + "equals(D_220055064_4_4,503154121)", + "valueIsOneOf('D_220055064_4_4',807835037) or valueLength('D_395747093_4_4')>0", + "equals(D_220055064_4_4,178420302)", + "greaterThanOrEqual(D_877074400_V2,5)", + "equals(D_220055064_5_5,661871565)", + "equals(D_220055064_5_5,657978450)", + "equals(D_220055064_5_5,411943417)", + "equals(D_220055064_5_5,113838601)", + "equals(D_220055064_5_5,503154121)", + "valueIsOneOf('D_220055064_5_5',807835037) or valueLength('D_395747093_5_5')>0", + "equals(D_220055064_5_5,178420302)", + "greaterThanOrEqual(D_877074400_V2,6)", + "equals(D_220055064_6_6,661871565)", + "equals(D_220055064_6_6,657978450)", + "equals(D_220055064_6_6,411943417)", + "equals(D_220055064_6_6,113838601)", + "equals(D_220055064_6_6,503154121)", + "valueIsOneOf('D_220055064_6_6',807835037) or valueLength('D_395747093_6_6')>0", + "equals(D_220055064_6_6,178420302)", + "greaterThanOrEqual(D_877074400_V2,7)", + "equals(D_220055064_7_7,661871565)", + "equals(D_220055064_7_7,657978450)", + "equals(D_220055064_7_7,411943417)", + "equals(D_220055064_7_7,113838601)", + "equals(D_220055064_7_7,503154121)", + "valueIsOneOf('D_220055064_7_7',807835037) or valueLength('D_395747093_7_7')>0", + "equals(D_220055064_7_7,178420302)", + "greaterThanOrEqual(D_877074400_V2,8)", + "equals(D_220055064_8_8,661871565)", + "equals(D_220055064_8_8,657978450)", + "equals(D_220055064_8_8,411943417)", + "equals(D_220055064_8_8,113838601)", + "equals(D_220055064_8_8,503154121)", + "valueIsOneOf('D_220055064_8_8',807835037) or valueLength('D_395747093_8_8')>0", + "equals(D_220055064_8_8,178420302)", + "greaterThanOrEqual(D_877074400_V2,9)", + "equals(D_220055064_9_9,661871565)", + "equals(D_220055064_9_9,657978450)", + "equals(D_220055064_9_9,411943417)", + "equals(D_220055064_9_9,113838601)", + "equals(D_220055064_9_9,503154121)", + "valueIsOneOf('D_220055064_9_9',807835037) or valueLength('D_395747093_9_9')>0", + "equals(D_220055064_9_9,178420302)", + "greaterThanOrEqual(D_877074400_V2,10)", + "equals(D_220055064_10_10,661871565)", + "equals(D_220055064_10_10,657978450)", + "equals(D_220055064_10_10,411943417)", + "equals(D_220055064_10_10,113838601)", + "equals(D_220055064_10_10,503154121)", + "valueIsOneOf('D_220055064_10_10',807835037) or valueLength('D_395747093_10_10')>0", + "equals(D_220055064_10_10,178420302)", + "greaterThanOrEqual(D_877074400_V2,11)", + "equals(D_220055064_11_11,661871565)", + "equals(D_220055064_11_11,657978450)", + "equals(D_220055064_11_11,411943417)", + "equals(D_220055064_11_11,113838601)", + "equals(D_220055064_11_11,503154121)", + "valueIsOneOf('D_220055064_11_11',807835037) or valueLength('D_395747093_11_11')>0", + "equals(D_220055064_11_11,178420302)", + "greaterThanOrEqual(D_877074400_V2,12)", + "equals(D_220055064_12_12,661871565)", + "equals(D_220055064_12_12,657978450)", + "equals(D_220055064_12_12,411943417)", + "equals(D_220055064_12_12,113838601)", + "equals(D_220055064_12_12,503154121)", + "valueIsOneOf('D_220055064_12_12',807835037) or valueLength('D_395747093_12_12')>0", + "equals(D_220055064_12_12,178420302)", + "greaterThanOrEqual(D_877074400_V2,13)", + "equals(D_220055064_13_13,661871565)", + "equals(D_220055064_13_13,657978450)", + "equals(D_220055064_13_13,411943417)", + "equals(D_220055064_13_13,113838601)", + "equals(D_220055064_13_13,503154121)", + "valueIsOneOf('D_220055064_13_13',807835037) or valueLength('D_395747093_13_13')>0", + "equals(D_220055064_13_13,178420302)", + "greaterThanOrEqual(D_877074400_V2,14)", + "equals(D_220055064_14_14,661871565)", + "equals(D_220055064_14_14,657978450)", + "equals(D_220055064_14_14,411943417)", + "equals(D_220055064_14_14,113838601)", + "equals(D_220055064_14_14,503154121)", + "valueIsOneOf('D_220055064_14_14',807835037) or valueLength('D_395747093_14_14')>0", + "equals(D_220055064_14_14,178420302)", + "greaterThanOrEqual(D_877074400_V2,15)", + "equals(D_220055064_15_15,661871565)", + "equals(D_220055064_15_15,657978450)", + "equals(D_220055064_15_15,411943417)", + "equals(D_220055064_15_15,113838601)", + "equals(D_220055064_15_15,503154121)", + "valueIsOneOf('D_220055064_15_15',807835037) or valueLength('D_395747093_15_15')>0", + "equals(D_220055064_15_15,178420302)", + "greaterThanOrEqual(D_877074400_V2,16)", + "equals(D_220055064_16_16,661871565)", + "equals(D_220055064_16_16,657978450)", + "equals(D_220055064_16_16,411943417)", + "equals(D_220055064_16_16,113838601)", + "equals(D_220055064_16_16,503154121)", + "valueIsOneOf('D_220055064_16_16',807835037) or valueLength('D_395747093_16_16')>0", + "equals(D_220055064_16_16,178420302)", + "greaterThanOrEqual(D_877074400_V2,17)", + "equals(D_220055064_17_17,661871565)", + "equals(D_220055064_17_17,657978450)", + "equals(D_220055064_17_17,411943417)", + "equals(D_220055064_17_17,113838601)", + "equals(D_220055064_17_17,503154121)", + "valueIsOneOf('D_220055064_17_17',807835037) or valueLength('D_395747093_17_17')>0", + "equals(D_220055064_17_17,178420302)", + "greaterThanOrEqual(D_877074400_V2,18)", + "equals(D_220055064_18_18,661871565)", + "equals(D_220055064_18_18,657978450)", + "equals(D_220055064_18_18,411943417)", + "equals(D_220055064_18_18,113838601)", + "equals(D_220055064_18_18,503154121)", + "valueIsOneOf('D_220055064_18_18',807835037) or valueLength('D_395747093_18_18')>0", + "equals(D_220055064_18_18,178420302)", + "greaterThanOrEqual(D_877074400_V2,19)", + "equals(D_220055064_19_19,661871565)", + "equals(D_220055064_19_19,657978450)", + "equals(D_220055064_19_19,411943417)", + "equals(D_220055064_19_19,113838601)", + "equals(D_220055064_19_19,503154121)", + "valueIsOneOf('D_220055064_19_19',807835037) or valueLength('D_395747093_19_19')>0", + "equals(D_220055064_19_19,178420302)", + "greaterThanOrEqual(D_877074400_V2,20)", + "equals(D_220055064_20_20,661871565)", + "equals(D_220055064_20_20,657978450)", + "equals(D_220055064_20_20,411943417)", + "equals(D_220055064_20_20,113838601)", + "equals(D_220055064_20_20,503154121)", + "valueIsOneOf('D_220055064_20_20',807835037) or valueLength('D_395747093_20_20')>0", + "equals(D_220055064_20_20,178420302)", + "greaterThanOrEqual(D_877074400_V2,21)", + "equals(D_220055064_21_21,661871565)", + "equals(D_220055064_21_21,657978450)", + "equals(D_220055064_21_21,411943417)", + "equals(D_220055064_21_21,113838601)", + "equals(D_220055064_21_21,503154121)", + "valueIsOneOf('D_220055064_21_21',807835037) or valueLength('D_395747093_21_21')>0", + "equals(D_220055064_21_21,178420302)", + "greaterThanOrEqual(D_877074400_V2,22)", + "equals(D_220055064_22_22,661871565)", + "equals(D_220055064_22_22,657978450)", + "equals(D_220055064_22_22,411943417)", + "equals(D_220055064_22_22,113838601)", + "equals(D_220055064_22_22,503154121)", + "valueIsOneOf('D_220055064_22_22',807835037) or valueLength('D_395747093_22_22')>0", + "equals(D_220055064_22_22,178420302)", + "greaterThanOrEqual(D_877074400_V2,23)", + "equals(D_220055064_23_23,661871565)", + "equals(D_220055064_23_23,657978450)", + "equals(D_220055064_23_23,411943417)", + "equals(D_220055064_23_23,113838601)", + "equals(D_220055064_23_23,503154121)", + "valueIsOneOf('D_220055064_23_23',807835037) or valueLength('D_395747093_23_23')>0", + "equals(D_220055064_23_23,178420302)", + "greaterThanOrEqual(D_877074400_V2,24)", + "equals(D_220055064_24_24,661871565)", + "equals(D_220055064_24_24,657978450)", + "equals(D_220055064_24_24,411943417)", + "equals(D_220055064_24_24,113838601)", + "equals(D_220055064_24_24,503154121)", + "valueIsOneOf('D_220055064_24_24',807835037) or valueLength('D_395747093_24_24')>0", + "equals(D_220055064_24_24,178420302)", + "greaterThanOrEqual(D_877074400_V2,25)", + "equals(D_220055064_25_25,661871565)", + "equals(D_220055064_25_25,657978450)", + "equals(D_220055064_25_25,411943417)", + "equals(D_220055064_25_25,113838601)", + "equals(D_220055064_25_25,503154121)", + "valueIsOneOf('D_220055064_25_25',807835037) or valueLength('D_395747093_25_25')>0", + "equals(D_220055064_25_25,178420302)" + ], + "sitesByScope": { + "grid-row": 29, + "inline": 479, + "question": 589 + }, + "sitesByAttribute": { + "data-displayif": 29, + "displayif": 1068 + } + }, + "grids": [ + { + "questionId": "D_847578001", + "questionIndex": 505, + "rowQuestionIds": [ + "D_488415137", + "D_167695804", + "D_730334054", + "D_215996690", + "D_462737492", + "D_469675296" + ], + "rowCount": 6, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "724612102", + "178780048", + "244354126" + ] + }, + { + "questionId": "D_136730307", + "questionIndex": 506, + "rowQuestionIds": [ + "D_962475128", + "D_989576239", + "D_338613869", + "D_126794793", + "D_218793117" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "724612102", + "178780048", + "244354126" + ] + }, + { + "questionId": "D_751358419", + "questionIndex": 507, + "rowQuestionIds": [ + "D_524096053", + "D_814101706", + "D_635026188", + "D_238135048", + "D_632714520" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "724612102", + "178780048", + "244354126" + ] + }, + { + "questionId": "D_114280729", + "questionIndex": 511, + "rowQuestionIds": [ + "D_374567479", + "D_966214244", + "D_109223043", + "D_368669706", + "D_605818246", + "D_790860504", + "D_336856410", + "D_518602598", + "D_770190369", + "D_994153376", + "D_481587023", + "D_590361055", + "D_108389123", + "D_747085418", + "D_702905707", + "D_986119909" + ], + "rowCount": 16, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "232063618", + "948148236", + "692824372" + ] + }, + { + "questionId": "D_813989715", + "questionIndex": 517, + "rowQuestionIds": [ + "D_874168085", + "D_283112988", + "D_580629349", + "D_151327643", + "D_440872808", + "D_874223830" + ], + "rowCount": 6, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "931688701", + "586272115", + "770236544" + ] + }, + { + "questionId": "D_857165713", + "questionIndex": 518, + "rowQuestionIds": [ + "D_847529903", + "D_219358831", + "D_636367178", + "D_243443780", + "D_357462273", + "D_638380747", + "D_187399900" + ], + "rowCount": 7, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "931688701", + "586272115", + "770236544" + ] + }, + { + "questionId": "D_749956170", + "questionIndex": 519, + "rowQuestionIds": [ + "D_527872064", + "D_691752394", + "D_143206081", + "D_431203595", + "D_516899143", + "D_223008071", + "D_599862694", + "D_860444009", + "D_246857412", + "D_144819886", + "D_304155106", + "D_830581863", + "D_463689026" + ], + "rowCount": 13, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "232063618", + "948148236", + "692824372" + ] + } + ], + "loops": [ + { + "loopIndex": "1", + "loopMaxQuestionIds": [ + "D_860011428" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 3, + 23, + 43, + 63, + 83, + 103, + 123, + 143, + 163, + 183, + 203, + 223, + 243, + 263, + 283, + 303, + 323, + 343, + 363, + 383, + 403, + 423, + 443, + 463, + 483 + ], + "boundaryIndex": 503 + }, + { + "loopIndex": "2", + "loopMaxQuestionIds": [ + "D_877074400_V2" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 523, + 526, + 529, + 532, + 535, + 538, + 541, + 544, + 547, + 550, + 553, + 556, + 559, + 562, + 565, + 568, + 571, + 574, + 577, + 580, + 583, + 586, + 589, + 592, + 595 + ], + "boundaryIndex": 598 + } + ], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 97, + "processorQuestionCount": 600, + "processedQuestionCount": 600, + "renderedFormCount": 600, + "controlCount": 3922, + "responseControlCount": 1970, + "explicitTransitionCount": 540, + "sequentialAdjacencyCount": 599, + "resolvedExplicitTransitionCount": 540, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 1097, + "gridQuestionCount": 7, + "gridRowCount": 58, + "loopStartCount": 50, + "loopDefinitionCount": 2, + "loopExpandedQuestionCount": 575, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 517 + } + }, + { + "schemaVersion": 1, + "module": "moduleCOVID19", + "locale": "es", + "language": "es", + "path": "prod/moduleCOVID19Spanish.txt", + "sha256": "3aec9221ab9dedd091d46b6eee3de1085e49f3a7c93e98e4ee8b47da969b9c43", + "questName": "D_793330426", + "version": "1.3", + "authoredMarkerCount": 97, + "runtimeQuestionIds": [ + "SRVCOV_COVIDINTRO_V1R0", + "D_494226443?", + "D_860011428?", + "D_980800222_V2_1_1!", + "D_366980310_1_1?", + "D_498462481_1_1?", + "D_694503437_1_1?", + "D_451163824_1_1?", + "D_705336878_1_1?", + "D_928530823_1_1?", + "D_108733102_1_1?", + "D_389465772_1_1?", + "D_775313030_1_1?", + "D_744230001_1_1?", + "D_782396371_1_1?", + "D_930944000_1_1?", + "D_984121390_1_1?", + "D_430166879_1_1?", + "D_179406442_1_1?", + "D_803339020_1_1?", + "D_893966847_1_1?", + "D_169509213_1_1?", + "SRVCOV_COVSUMMARY_V1R0_1_1", + "D_980800222_V2_2_2!", + "D_366980310_2_2?", + "D_498462481_2_2?", + "D_694503437_2_2?", + "D_451163824_2_2?", + "D_705336878_2_2?", + "D_928530823_2_2?", + "D_108733102_2_2?", + "D_389465772_2_2?", + "D_775313030_2_2?", + "D_744230001_2_2?", + "D_782396371_2_2?", + "D_930944000_2_2?", + "D_984121390_2_2?", + "D_430166879_2_2?", + "D_179406442_2_2?", + "D_803339020_2_2?", + "D_893966847_2_2?", + "D_169509213_2_2?", + "SRVCOV_COVSUMMARY_V1R0_2_2", + "D_980800222_V2_3_3!", + "D_366980310_3_3?", + "D_498462481_3_3?", + "D_694503437_3_3?", + "D_451163824_3_3?", + "D_705336878_3_3?", + "D_928530823_3_3?", + "D_108733102_3_3?", + "D_389465772_3_3?", + "D_775313030_3_3?", + "D_744230001_3_3?", + "D_782396371_3_3?", + "D_930944000_3_3?", + "D_984121390_3_3?", + "D_430166879_3_3?", + "D_179406442_3_3?", + "D_803339020_3_3?", + "D_893966847_3_3?", + "D_169509213_3_3?", + "SRVCOV_COVSUMMARY_V1R0_3_3", + "D_980800222_V2_4_4!", + "D_366980310_4_4?", + "D_498462481_4_4?", + "D_694503437_4_4?", + "D_451163824_4_4?", + "D_705336878_4_4?", + "D_928530823_4_4?", + "D_108733102_4_4?", + "D_389465772_4_4?", + "D_775313030_4_4?", + "D_744230001_4_4?", + "D_782396371_4_4?", + "D_930944000_4_4?", + "D_984121390_4_4?", + "D_430166879_4_4?", + "D_179406442_4_4?", + "D_803339020_4_4?", + "D_893966847_4_4?", + "D_169509213_4_4?", + "SRVCOV_COVSUMMARY_V1R0_4_4", + "D_980800222_V2_5_5!", + "D_366980310_5_5?", + "D_498462481_5_5?", + "D_694503437_5_5?", + "D_451163824_5_5?", + "D_705336878_5_5?", + "D_928530823_5_5?", + "D_108733102_5_5?", + "D_389465772_5_5?", + "D_775313030_5_5?", + "D_744230001_5_5?", + "D_782396371_5_5?", + "D_930944000_5_5?", + "D_984121390_5_5?", + "D_430166879_5_5?", + "D_179406442_5_5?", + "D_803339020_5_5?", + "D_893966847_5_5?", + "D_169509213_5_5?", + "SRVCOV_COVSUMMARY_V1R0_5_5", + "D_980800222_V2_6_6!", + "D_366980310_6_6?", + "D_498462481_6_6?", + "D_694503437_6_6?", + "D_451163824_6_6?", + "D_705336878_6_6?", + "D_928530823_6_6?", + "D_108733102_6_6?", + "D_389465772_6_6?", + "D_775313030_6_6?", + "D_744230001_6_6?", + "D_782396371_6_6?", + "D_930944000_6_6?", + "D_984121390_6_6?", + "D_430166879_6_6?", + "D_179406442_6_6?", + "D_803339020_6_6?", + "D_893966847_6_6?", + "D_169509213_6_6?", + "SRVCOV_COVSUMMARY_V1R0_6_6", + "D_980800222_V2_7_7!", + "D_366980310_7_7?", + "D_498462481_7_7?", + "D_694503437_7_7?", + "D_451163824_7_7?", + "D_705336878_7_7?", + "D_928530823_7_7?", + "D_108733102_7_7?", + "D_389465772_7_7?", + "D_775313030_7_7?", + "D_744230001_7_7?", + "D_782396371_7_7?", + "D_930944000_7_7?", + "D_984121390_7_7?", + "D_430166879_7_7?", + "D_179406442_7_7?", + "D_803339020_7_7?", + "D_893966847_7_7?", + "D_169509213_7_7?", + "SRVCOV_COVSUMMARY_V1R0_7_7", + "D_980800222_V2_8_8!", + "D_366980310_8_8?", + "D_498462481_8_8?", + "D_694503437_8_8?", + "D_451163824_8_8?", + "D_705336878_8_8?", + "D_928530823_8_8?", + "D_108733102_8_8?", + "D_389465772_8_8?", + "D_775313030_8_8?", + "D_744230001_8_8?", + "D_782396371_8_8?", + "D_930944000_8_8?", + "D_984121390_8_8?", + "D_430166879_8_8?", + "D_179406442_8_8?", + "D_803339020_8_8?", + "D_893966847_8_8?", + "D_169509213_8_8?", + "SRVCOV_COVSUMMARY_V1R0_8_8", + "D_980800222_V2_9_9!", + "D_366980310_9_9?", + "D_498462481_9_9?", + "D_694503437_9_9?", + "D_451163824_9_9?", + "D_705336878_9_9?", + "D_928530823_9_9?", + "D_108733102_9_9?", + "D_389465772_9_9?", + "D_775313030_9_9?", + "D_744230001_9_9?", + "D_782396371_9_9?", + "D_930944000_9_9?", + "D_984121390_9_9?", + "D_430166879_9_9?", + "D_179406442_9_9?", + "D_803339020_9_9?", + "D_893966847_9_9?", + "D_169509213_9_9?", + "SRVCOV_COVSUMMARY_V1R0_9_9", + "D_980800222_V2_10_10!", + "D_366980310_10_10?", + "D_498462481_10_10?", + "D_694503437_10_10?", + "D_451163824_10_10?", + "D_705336878_10_10?", + "D_928530823_10_10?", + "D_108733102_10_10?", + "D_389465772_10_10?", + "D_775313030_10_10?", + "D_744230001_10_10?", + "D_782396371_10_10?", + "D_930944000_10_10?", + "D_984121390_10_10?", + "D_430166879_10_10?", + "D_179406442_10_10?", + "D_803339020_10_10?", + "D_893966847_10_10?", + "D_169509213_10_10?", + "SRVCOV_COVSUMMARY_V1R0_10_10", + "D_980800222_V2_11_11!", + "D_366980310_11_11?", + "D_498462481_11_11?", + "D_694503437_11_11?", + "D_451163824_11_11?", + "D_705336878_11_11?", + "D_928530823_11_11?", + "D_108733102_11_11?", + "D_389465772_11_11?", + "D_775313030_11_11?", + "D_744230001_11_11?", + "D_782396371_11_11?", + "D_930944000_11_11?", + "D_984121390_11_11?", + "D_430166879_11_11?", + "D_179406442_11_11?", + "D_803339020_11_11?", + "D_893966847_11_11?", + "D_169509213_11_11?", + "SRVCOV_COVSUMMARY_V1R0_11_11", + "D_980800222_V2_12_12!", + "D_366980310_12_12?", + "D_498462481_12_12?", + "D_694503437_12_12?", + "D_451163824_12_12?", + "D_705336878_12_12?", + "D_928530823_12_12?", + "D_108733102_12_12?", + "D_389465772_12_12?", + "D_775313030_12_12?", + "D_744230001_12_12?", + "D_782396371_12_12?", + "D_930944000_12_12?", + "D_984121390_12_12?", + "D_430166879_12_12?", + "D_179406442_12_12?", + "D_803339020_12_12?", + "D_893966847_12_12?", + "D_169509213_12_12?", + "SRVCOV_COVSUMMARY_V1R0_12_12", + "D_980800222_V2_13_13!", + "D_366980310_13_13?", + "D_498462481_13_13?", + "D_694503437_13_13?", + "D_451163824_13_13?", + "D_705336878_13_13?", + "D_928530823_13_13?", + "D_108733102_13_13?", + "D_389465772_13_13?", + "D_775313030_13_13?", + "D_744230001_13_13?", + "D_782396371_13_13?", + "D_930944000_13_13?", + "D_984121390_13_13?", + "D_430166879_13_13?", + "D_179406442_13_13?", + "D_803339020_13_13?", + "D_893966847_13_13?", + "D_169509213_13_13?", + "SRVCOV_COVSUMMARY_V1R0_13_13", + "D_980800222_V2_14_14!", + "D_366980310_14_14?", + "D_498462481_14_14?", + "D_694503437_14_14?", + "D_451163824_14_14?", + "D_705336878_14_14?", + "D_928530823_14_14?", + "D_108733102_14_14?", + "D_389465772_14_14?", + "D_775313030_14_14?", + "D_744230001_14_14?", + "D_782396371_14_14?", + "D_930944000_14_14?", + "D_984121390_14_14?", + "D_430166879_14_14?", + "D_179406442_14_14?", + "D_803339020_14_14?", + "D_893966847_14_14?", + "D_169509213_14_14?", + "SRVCOV_COVSUMMARY_V1R0_14_14", + "D_980800222_V2_15_15!", + "D_366980310_15_15?", + "D_498462481_15_15?", + "D_694503437_15_15?", + "D_451163824_15_15?", + "D_705336878_15_15?", + "D_928530823_15_15?", + "D_108733102_15_15?", + "D_389465772_15_15?", + "D_775313030_15_15?", + "D_744230001_15_15?", + "D_782396371_15_15?", + "D_930944000_15_15?", + "D_984121390_15_15?", + "D_430166879_15_15?", + "D_179406442_15_15?", + "D_803339020_15_15?", + "D_893966847_15_15?", + "D_169509213_15_15?", + "SRVCOV_COVSUMMARY_V1R0_15_15", + "D_980800222_V2_16_16!", + "D_366980310_16_16?", + "D_498462481_16_16?", + "D_694503437_16_16?", + "D_451163824_16_16?", + "D_705336878_16_16?", + "D_928530823_16_16?", + "D_108733102_16_16?", + "D_389465772_16_16?", + "D_775313030_16_16?", + "D_744230001_16_16?", + "D_782396371_16_16?", + "D_930944000_16_16?", + "D_984121390_16_16?", + "D_430166879_16_16?", + "D_179406442_16_16?", + "D_803339020_16_16?", + "D_893966847_16_16?", + "D_169509213_16_16?", + "SRVCOV_COVSUMMARY_V1R0_16_16", + "D_980800222_V2_17_17!", + "D_366980310_17_17?", + "D_498462481_17_17?", + "D_694503437_17_17?", + "D_451163824_17_17?", + "D_705336878_17_17?", + "D_928530823_17_17?", + "D_108733102_17_17?", + "D_389465772_17_17?", + "D_775313030_17_17?", + "D_744230001_17_17?", + "D_782396371_17_17?", + "D_930944000_17_17?", + "D_984121390_17_17?", + "D_430166879_17_17?", + "D_179406442_17_17?", + "D_803339020_17_17?", + "D_893966847_17_17?", + "D_169509213_17_17?", + "SRVCOV_COVSUMMARY_V1R0_17_17", + "D_980800222_V2_18_18!", + "D_366980310_18_18?", + "D_498462481_18_18?", + "D_694503437_18_18?", + "D_451163824_18_18?", + "D_705336878_18_18?", + "D_928530823_18_18?", + "D_108733102_18_18?", + "D_389465772_18_18?", + "D_775313030_18_18?", + "D_744230001_18_18?", + "D_782396371_18_18?", + "D_930944000_18_18?", + "D_984121390_18_18?", + "D_430166879_18_18?", + "D_179406442_18_18?", + "D_803339020_18_18?", + "D_893966847_18_18?", + "D_169509213_18_18?", + "SRVCOV_COVSUMMARY_V1R0_18_18", + "D_980800222_V2_19_19!", + "D_366980310_19_19?", + "D_498462481_19_19?", + "D_694503437_19_19?", + "D_451163824_19_19?", + "D_705336878_19_19?", + "D_928530823_19_19?", + "D_108733102_19_19?", + "D_389465772_19_19?", + "D_775313030_19_19?", + "D_744230001_19_19?", + "D_782396371_19_19?", + "D_930944000_19_19?", + "D_984121390_19_19?", + "D_430166879_19_19?", + "D_179406442_19_19?", + "D_803339020_19_19?", + "D_893966847_19_19?", + "D_169509213_19_19?", + "SRVCOV_COVSUMMARY_V1R0_19_19", + "D_980800222_V2_20_20!", + "D_366980310_20_20?", + "D_498462481_20_20?", + "D_694503437_20_20?", + "D_451163824_20_20?", + "D_705336878_20_20?", + "D_928530823_20_20?", + "D_108733102_20_20?", + "D_389465772_20_20?", + "D_775313030_20_20?", + "D_744230001_20_20?", + "D_782396371_20_20?", + "D_930944000_20_20?", + "D_984121390_20_20?", + "D_430166879_20_20?", + "D_179406442_20_20?", + "D_803339020_20_20?", + "D_893966847_20_20?", + "D_169509213_20_20?", + "SRVCOV_COVSUMMARY_V1R0_20_20", + "D_980800222_V2_21_21!", + "D_366980310_21_21?", + "D_498462481_21_21?", + "D_694503437_21_21?", + "D_451163824_21_21?", + "D_705336878_21_21?", + "D_928530823_21_21?", + "D_108733102_21_21?", + "D_389465772_21_21?", + "D_775313030_21_21?", + "D_744230001_21_21?", + "D_782396371_21_21?", + "D_930944000_21_21?", + "D_984121390_21_21?", + "D_430166879_21_21?", + "D_179406442_21_21?", + "D_803339020_21_21?", + "D_893966847_21_21?", + "D_169509213_21_21?", + "SRVCOV_COVSUMMARY_V1R0_21_21", + "D_980800222_V2_22_22!", + "D_366980310_22_22?", + "D_498462481_22_22?", + "D_694503437_22_22?", + "D_451163824_22_22?", + "D_705336878_22_22?", + "D_928530823_22_22?", + "D_108733102_22_22?", + "D_389465772_22_22?", + "D_775313030_22_22?", + "D_744230001_22_22?", + "D_782396371_22_22?", + "D_930944000_22_22?", + "D_984121390_22_22?", + "D_430166879_22_22?", + "D_179406442_22_22?", + "D_803339020_22_22?", + "D_893966847_22_22?", + "D_169509213_22_22?", + "SRVCOV_COVSUMMARY_V1R0_22_22", + "D_980800222_V2_23_23!", + "D_366980310_23_23?", + "D_498462481_23_23?", + "D_694503437_23_23?", + "D_451163824_23_23?", + "D_705336878_23_23?", + "D_928530823_23_23?", + "D_108733102_23_23?", + "D_389465772_23_23?", + "D_775313030_23_23?", + "D_744230001_23_23?", + "D_782396371_23_23?", + "D_930944000_23_23?", + "D_984121390_23_23?", + "D_430166879_23_23?", + "D_179406442_23_23?", + "D_803339020_23_23?", + "D_893966847_23_23?", + "D_169509213_23_23?", + "SRVCOV_COVSUMMARY_V1R0_23_23", + "D_980800222_V2_24_24!", + "D_366980310_24_24?", + "D_498462481_24_24?", + "D_694503437_24_24?", + "D_451163824_24_24?", + "D_705336878_24_24?", + "D_928530823_24_24?", + "D_108733102_24_24?", + "D_389465772_24_24?", + "D_775313030_24_24?", + "D_744230001_24_24?", + "D_782396371_24_24?", + "D_930944000_24_24?", + "D_984121390_24_24?", + "D_430166879_24_24?", + "D_179406442_24_24?", + "D_803339020_24_24?", + "D_893966847_24_24?", + "D_169509213_24_24?", + "SRVCOV_COVSUMMARY_V1R0_24_24", + "D_980800222_V2_25_25!", + "D_366980310_25_25?", + "D_498462481_25_25?", + "D_694503437_25_25?", + "D_451163824_25_25?", + "D_705336878_25_25?", + "D_928530823_25_25?", + "D_108733102_25_25?", + "D_389465772_25_25?", + "D_775313030_25_25?", + "D_744230001_25_25?", + "D_782396371_25_25?", + "D_930944000_25_25?", + "D_984121390_25_25?", + "D_430166879_25_25?", + "D_179406442_25_25?", + "D_803339020_25_25?", + "D_893966847_25_25?", + "D_169509213_25_25?", + "SRVCOV_COVSUMMARY_V1R0_25_25", + "END_OF_LOOP", + "COV19_SKIP", + "D_847578001", + "D_136730307", + "D_751358419", + "D_110872086?", + "D_591826144?", + "COV20_SKIP", + "D_114280729", + "COV20A17_SKIP", + "D_934384452?", + "D_273371161?", + "D_959877599?", + "COV23_SKIP", + "D_813989715", + "D_857165713", + "D_749956170", + "SRVCOV_COV25INTRO_V1R0", + "D_890156588_V2?", + "D_877074400_V2?", + "D_715581797_V2_1_1?", + "D_220055064_1_1?", + "SRVCOV_COV29_V1R0_1_1", + "D_715581797_V2_2_2?", + "D_220055064_2_2?", + "SRVCOV_COV29_V1R0_2_2", + "D_715581797_V2_3_3?", + "D_220055064_3_3?", + "SRVCOV_COV29_V1R0_3_3", + "D_715581797_V2_4_4?", + "D_220055064_4_4?", + "SRVCOV_COV29_V1R0_4_4", + "D_715581797_V2_5_5?", + "D_220055064_5_5?", + "SRVCOV_COV29_V1R0_5_5", + "D_715581797_V2_6_6?", + "D_220055064_6_6?", + "SRVCOV_COV29_V1R0_6_6", + "D_715581797_V2_7_7?", + "D_220055064_7_7?", + "SRVCOV_COV29_V1R0_7_7", + "D_715581797_V2_8_8?", + "D_220055064_8_8?", + "SRVCOV_COV29_V1R0_8_8", + "D_715581797_V2_9_9?", + "D_220055064_9_9?", + "SRVCOV_COV29_V1R0_9_9", + "D_715581797_V2_10_10?", + "D_220055064_10_10?", + "SRVCOV_COV29_V1R0_10_10", + "D_715581797_V2_11_11?", + "D_220055064_11_11?", + "SRVCOV_COV29_V1R0_11_11", + "D_715581797_V2_12_12?", + "D_220055064_12_12?", + "SRVCOV_COV29_V1R0_12_12", + "D_715581797_V2_13_13?", + "D_220055064_13_13?", + "SRVCOV_COV29_V1R0_13_13", + "D_715581797_V2_14_14?", + "D_220055064_14_14?", + "SRVCOV_COV29_V1R0_14_14", + "D_715581797_V2_15_15?", + "D_220055064_15_15?", + "SRVCOV_COV29_V1R0_15_15", + "D_715581797_V2_16_16?", + "D_220055064_16_16?", + "SRVCOV_COV29_V1R0_16_16", + "D_715581797_V2_17_17?", + "D_220055064_17_17?", + "SRVCOV_COV29_V1R0_17_17", + "D_715581797_V2_18_18?", + "D_220055064_18_18?", + "SRVCOV_COV29_V1R0_18_18", + "D_715581797_V2_19_19?", + "D_220055064_19_19?", + "SRVCOV_COV29_V1R0_19_19", + "D_715581797_V2_20_20?", + "D_220055064_20_20?", + "SRVCOV_COV29_V1R0_20_20", + "D_715581797_V2_21_21?", + "D_220055064_21_21?", + "SRVCOV_COV29_V1R0_21_21", + "D_715581797_V2_22_22?", + "D_220055064_22_22?", + "SRVCOV_COV29_V1R0_22_22", + "D_715581797_V2_23_23?", + "D_220055064_23_23?", + "SRVCOV_COV29_V1R0_23_23", + "D_715581797_V2_24_24?", + "D_220055064_24_24?", + "SRVCOV_COV29_V1R0_24_24", + "D_715581797_V2_25_25?", + "D_220055064_25_25?", + "SRVCOV_COV29_V1R0_25_25", + "END_OF_LOOP", + "END" + ], + "responseControlsByType": { + "checkbox": 475, + "month": 50, + "number": 129, + "radio": 1265, + "text": 51 + }, + "explicitTransitions": { + "targets": [ + "COV23_SKIP", + "D_694503437_1_1", + "D_498462481_1_1", + "SRVCOV_COVSUMMARY_V1R0_1_1", + "D_984121390_1_1", + "D_179406442_1_1", + "D_893966847_1_1", + "_CONTINUE1_1_1", + "D_694503437_2_2", + "D_498462481_2_2", + "SRVCOV_COVSUMMARY_V1R0_2_2", + "D_984121390_2_2", + "D_179406442_2_2", + "D_893966847_2_2", + "_CONTINUE1_2_2", + "D_694503437_3_3", + "D_498462481_3_3", + "SRVCOV_COVSUMMARY_V1R0_3_3", + "D_984121390_3_3", + "D_179406442_3_3", + "D_893966847_3_3", + "_CONTINUE1_3_3", + "D_694503437_4_4", + "D_498462481_4_4", + "SRVCOV_COVSUMMARY_V1R0_4_4", + "D_984121390_4_4", + "D_179406442_4_4", + "D_893966847_4_4", + "_CONTINUE1_4_4", + "D_694503437_5_5", + "D_498462481_5_5", + "SRVCOV_COVSUMMARY_V1R0_5_5", + "D_984121390_5_5", + "D_179406442_5_5", + "D_893966847_5_5", + "_CONTINUE1_5_5", + "D_694503437_6_6", + "D_498462481_6_6", + "SRVCOV_COVSUMMARY_V1R0_6_6", + "D_984121390_6_6", + "D_179406442_6_6", + "D_893966847_6_6", + "_CONTINUE1_6_6", + "D_694503437_7_7", + "D_498462481_7_7", + "SRVCOV_COVSUMMARY_V1R0_7_7", + "D_984121390_7_7", + "D_179406442_7_7", + "D_893966847_7_7", + "_CONTINUE1_7_7", + "D_694503437_8_8", + "D_498462481_8_8", + "SRVCOV_COVSUMMARY_V1R0_8_8", + "D_984121390_8_8", + "D_179406442_8_8", + "D_893966847_8_8", + "_CONTINUE1_8_8", + "D_694503437_9_9", + "D_498462481_9_9", + "SRVCOV_COVSUMMARY_V1R0_9_9", + "D_984121390_9_9", + "D_179406442_9_9", + "D_893966847_9_9", + "_CONTINUE1_9_9", + "D_694503437_10_10", + "D_498462481_10_10", + "SRVCOV_COVSUMMARY_V1R0_10_10", + "D_984121390_10_10", + "D_179406442_10_10", + "D_893966847_10_10", + "_CONTINUE1_10_10", + "D_694503437_11_11", + "D_498462481_11_11", + "SRVCOV_COVSUMMARY_V1R0_11_11", + "D_984121390_11_11", + "D_179406442_11_11", + "D_893966847_11_11", + "_CONTINUE1_11_11", + "D_694503437_12_12", + "D_498462481_12_12", + "SRVCOV_COVSUMMARY_V1R0_12_12", + "D_984121390_12_12", + "D_179406442_12_12", + "D_893966847_12_12", + "_CONTINUE1_12_12", + "D_694503437_13_13", + "D_498462481_13_13", + "SRVCOV_COVSUMMARY_V1R0_13_13", + "D_984121390_13_13", + "D_179406442_13_13", + "D_893966847_13_13", + "_CONTINUE1_13_13", + "D_694503437_14_14", + "D_498462481_14_14", + "SRVCOV_COVSUMMARY_V1R0_14_14", + "D_984121390_14_14", + "D_179406442_14_14", + "D_893966847_14_14", + "_CONTINUE1_14_14", + "D_694503437_15_15", + "D_498462481_15_15", + "SRVCOV_COVSUMMARY_V1R0_15_15", + "D_984121390_15_15", + "D_179406442_15_15", + "D_893966847_15_15", + "_CONTINUE1_15_15", + "D_694503437_16_16", + "D_498462481_16_16", + "SRVCOV_COVSUMMARY_V1R0_16_16", + "D_984121390_16_16", + "D_179406442_16_16", + "D_893966847_16_16", + "_CONTINUE1_16_16", + "D_694503437_17_17", + "D_498462481_17_17", + "SRVCOV_COVSUMMARY_V1R0_17_17", + "D_984121390_17_17", + "D_179406442_17_17", + "D_893966847_17_17", + "_CONTINUE1_17_17", + "D_694503437_18_18", + "D_498462481_18_18", + "SRVCOV_COVSUMMARY_V1R0_18_18", + "D_984121390_18_18", + "D_179406442_18_18", + "D_893966847_18_18", + "_CONTINUE1_18_18", + "D_694503437_19_19", + "D_498462481_19_19", + "SRVCOV_COVSUMMARY_V1R0_19_19", + "D_984121390_19_19", + "D_179406442_19_19", + "D_893966847_19_19", + "_CONTINUE1_19_19", + "D_694503437_20_20", + "D_498462481_20_20", + "SRVCOV_COVSUMMARY_V1R0_20_20", + "D_984121390_20_20", + "D_179406442_20_20", + "D_893966847_20_20", + "_CONTINUE1_20_20", + "D_694503437_21_21", + "D_498462481_21_21", + "SRVCOV_COVSUMMARY_V1R0_21_21", + "D_984121390_21_21", + "D_179406442_21_21", + "D_893966847_21_21", + "_CONTINUE1_21_21", + "D_694503437_22_22", + "D_498462481_22_22", + "SRVCOV_COVSUMMARY_V1R0_22_22", + "D_984121390_22_22", + "D_179406442_22_22", + "D_893966847_22_22", + "_CONTINUE1_22_22", + "D_694503437_23_23", + "D_498462481_23_23", + "SRVCOV_COVSUMMARY_V1R0_23_23", + "D_984121390_23_23", + "D_179406442_23_23", + "D_893966847_23_23", + "_CONTINUE1_23_23", + "D_694503437_24_24", + "D_498462481_24_24", + "SRVCOV_COVSUMMARY_V1R0_24_24", + "D_984121390_24_24", + "D_179406442_24_24", + "D_893966847_24_24", + "_CONTINUE1_24_24", + "D_694503437_25_25", + "D_498462481_25_25", + "SRVCOV_COVSUMMARY_V1R0_25_25", + "D_984121390_25_25", + "D_179406442_25_25", + "D_893966847_25_25", + "_CONTINUE1_25_25", + "COV20_SKIP", + "D_591826144", + "COV20A17_SKIP", + "SRVCOV_COV25INTRO_V1R0", + "END" + ], + "byKind": { + "default": 30, + "no-response": 153, + "response": 357 + }, + "byResolution": { + "exact": 512, + "terminal": 3, + "virtual-loop": 25 + }, + "triggerTypes": { + "hidden": 183, + "radio": 357 + }, + "triggerValues": [ + "104430631", + "178420302", + "353358909", + "317811347", + "707601969" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "greaterThanOrEqual(D_860011428,1)", + "exists('D_686508359_1_1')", + "equals(D_366980310_1_1,353358909)", + "equals(D_366980310_1_1,104430631)", + "equals(D_366980310_1_1,178420302)", + "equals(D_694503437_1_1,353358909)", + "equals(D_694503437_1_1,104430631)", + "doesNotEqual(D_694503437_1_1,104430631)", + "equals(D_775313030_1_1,353358909)", + "equals(D_775313030_1_1,104430631)", + "equals(D_775313030_1_1,178420302)", + "greaterThanOrEqual(D_860011428,2)", + "exists('D_686508359_2_2')", + "equals(D_366980310_2_2,353358909)", + "equals(D_366980310_2_2,104430631)", + "equals(D_366980310_2_2,178420302)", + "equals(D_694503437_2_2,353358909)", + "equals(D_694503437_2_2,104430631)", + "doesNotEqual(D_694503437_2_2,104430631)", + "equals(D_775313030_2_2,353358909)", + "equals(D_775313030_2_2,104430631)", + "equals(D_775313030_2_2,178420302)", + "greaterThanOrEqual(D_860011428,3)", + "exists('D_686508359_3_3')", + "equals(D_366980310_3_3,353358909)", + "equals(D_366980310_3_3,104430631)", + "equals(D_366980310_3_3,178420302)", + "equals(D_694503437_3_3,353358909)", + "equals(D_694503437_3_3,104430631)", + "doesNotEqual(D_694503437_3_3,104430631)", + "equals(D_775313030_3_3,353358909)", + "equals(D_775313030_3_3,104430631)", + "equals(D_775313030_3_3,178420302)", + "greaterThanOrEqual(D_860011428,4)", + "exists('D_686508359_4_4')", + "equals(D_366980310_4_4,353358909)", + "equals(D_366980310_4_4,104430631)", + "equals(D_366980310_4_4,178420302)", + "equals(D_694503437_4_4,353358909)", + "equals(D_694503437_4_4,104430631)", + "doesNotEqual(D_694503437_4_4,104430631)", + "equals(D_775313030_4_4,353358909)", + "equals(D_775313030_4_4,104430631)", + "equals(D_775313030_4_4,178420302)", + "greaterThanOrEqual(D_860011428,5)", + "exists('D_686508359_5_5')", + "equals(D_366980310_5_5,353358909)", + "equals(D_366980310_5_5,104430631)", + "equals(D_366980310_5_5,178420302)", + "equals(D_694503437_5_5,353358909)", + "equals(D_694503437_5_5,104430631)", + "doesNotEqual(D_694503437_5_5,104430631)", + "equals(D_775313030_5_5,353358909)", + "equals(D_775313030_5_5,104430631)", + "equals(D_775313030_5_5,178420302)", + "greaterThanOrEqual(D_860011428,6)", + "exists('D_686508359_6_6')", + "equals(D_366980310_6_6,353358909)", + "equals(D_366980310_6_6,104430631)", + "equals(D_366980310_6_6,178420302)", + "equals(D_694503437_6_6,353358909)", + "equals(D_694503437_6_6,104430631)", + "doesNotEqual(D_694503437_6_6,104430631)", + "equals(D_775313030_6_6,353358909)", + "equals(D_775313030_6_6,104430631)", + "equals(D_775313030_6_6,178420302)", + "greaterThanOrEqual(D_860011428,7)", + "exists('D_686508359_7_7')", + "equals(D_366980310_7_7,353358909)", + "equals(D_366980310_7_7,104430631)", + "equals(D_366980310_7_7,178420302)", + "equals(D_694503437_7_7,353358909)", + "equals(D_694503437_7_7,104430631)", + "doesNotEqual(D_694503437_7_7,104430631)", + "equals(D_775313030_7_7,353358909)", + "equals(D_775313030_7_7,104430631)", + "equals(D_775313030_7_7,178420302)", + "greaterThanOrEqual(D_860011428,8)", + "exists('D_686508359_8_8')", + "equals(D_366980310_8_8,353358909)", + "equals(D_366980310_8_8,104430631)", + "equals(D_366980310_8_8,178420302)", + "equals(D_694503437_8_8,353358909)", + "equals(D_694503437_8_8,104430631)", + "doesNotEqual(D_694503437_8_8,104430631)", + "equals(D_775313030_8_8,353358909)", + "equals(D_775313030_8_8,104430631)", + "equals(D_775313030_8_8,178420302)", + "greaterThanOrEqual(D_860011428,9)", + "exists('D_686508359_9_9')", + "equals(D_366980310_9_9,353358909)", + "equals(D_366980310_9_9,104430631)", + "equals(D_366980310_9_9,178420302)", + "equals(D_694503437_9_9,353358909)", + "equals(D_694503437_9_9,104430631)", + "doesNotEqual(D_694503437_9_9,104430631)", + "equals(D_775313030_9_9,353358909)", + "equals(D_775313030_9_9,104430631)", + "equals(D_775313030_9_9,178420302)", + "greaterThanOrEqual(D_860011428,10)", + "exists('D_686508359_10_10')", + "equals(D_366980310_10_10,353358909)", + "equals(D_366980310_10_10,104430631)", + "equals(D_366980310_10_10,178420302)", + "equals(D_694503437_10_10,353358909)", + "equals(D_694503437_10_10,104430631)", + "doesNotEqual(D_694503437_10_10,104430631)", + "equals(D_775313030_10_10,353358909)", + "equals(D_775313030_10_10,104430631)", + "equals(D_775313030_10_10,178420302)", + "greaterThanOrEqual(D_860011428,11)", + "exists('D_686508359_11_11')", + "equals(D_366980310_11_11,353358909)", + "equals(D_366980310_11_11,104430631)", + "equals(D_366980310_11_11,178420302)", + "equals(D_694503437_11_11,353358909)", + "equals(D_694503437_11_11,104430631)", + "doesNotEqual(D_694503437_11_11,104430631)", + "equals(D_775313030_11_11,353358909)", + "equals(D_775313030_11_11,104430631)", + "equals(D_775313030_11_11,178420302)", + "greaterThanOrEqual(D_860011428,12)", + "exists('D_686508359_12_12')", + "equals(D_366980310_12_12,353358909)", + "equals(D_366980310_12_12,104430631)", + "equals(D_366980310_12_12,178420302)", + "equals(D_694503437_12_12,353358909)", + "equals(D_694503437_12_12,104430631)", + "doesNotEqual(D_694503437_12_12,104430631)", + "equals(D_775313030_12_12,353358909)", + "equals(D_775313030_12_12,104430631)", + "equals(D_775313030_12_12,178420302)", + "greaterThanOrEqual(D_860011428,13)", + "exists('D_686508359_13_13')", + "equals(D_366980310_13_13,353358909)", + "equals(D_366980310_13_13,104430631)", + "equals(D_366980310_13_13,178420302)", + "equals(D_694503437_13_13,353358909)", + "equals(D_694503437_13_13,104430631)", + "doesNotEqual(D_694503437_13_13,104430631)", + "equals(D_775313030_13_13,353358909)", + "equals(D_775313030_13_13,104430631)", + "equals(D_775313030_13_13,178420302)", + "greaterThanOrEqual(D_860011428,14)", + "exists('D_686508359_14_14')", + "equals(D_366980310_14_14,353358909)", + "equals(D_366980310_14_14,104430631)", + "equals(D_366980310_14_14,178420302)", + "equals(D_694503437_14_14,353358909)", + "equals(D_694503437_14_14,104430631)", + "doesNotEqual(D_694503437_14_14,104430631)", + "equals(D_775313030_14_14,353358909)", + "equals(D_775313030_14_14,104430631)", + "equals(D_775313030_14_14,178420302)", + "greaterThanOrEqual(D_860011428,15)", + "exists('D_686508359_15_15')", + "equals(D_366980310_15_15,353358909)", + "equals(D_366980310_15_15,104430631)", + "equals(D_366980310_15_15,178420302)", + "equals(D_694503437_15_15,353358909)", + "equals(D_694503437_15_15,104430631)", + "doesNotEqual(D_694503437_15_15,104430631)", + "equals(D_775313030_15_15,353358909)", + "equals(D_775313030_15_15,104430631)", + "equals(D_775313030_15_15,178420302)", + "greaterThanOrEqual(D_860011428,16)", + "exists('D_686508359_16_16')", + "equals(D_366980310_16_16,353358909)", + "equals(D_366980310_16_16,104430631)", + "equals(D_366980310_16_16,178420302)", + "equals(D_694503437_16_16,353358909)", + "equals(D_694503437_16_16,104430631)", + "doesNotEqual(D_694503437_16_16,104430631)", + "equals(D_775313030_16_16,353358909)", + "equals(D_775313030_16_16,104430631)", + "equals(D_775313030_16_16,178420302)", + "greaterThanOrEqual(D_860011428,17)", + "exists('D_686508359_17_17')", + "equals(D_366980310_17_17,353358909)", + "equals(D_366980310_17_17,104430631)", + "equals(D_366980310_17_17,178420302)", + "equals(D_694503437_17_17,353358909)", + "equals(D_694503437_17_17,104430631)", + "doesNotEqual(D_694503437_17_17,104430631)", + "equals(D_775313030_17_17,353358909)", + "equals(D_775313030_17_17,104430631)", + "equals(D_775313030_17_17,178420302)", + "greaterThanOrEqual(D_860011428,18)", + "exists('D_686508359_18_18')", + "equals(D_366980310_18_18,353358909)", + "equals(D_366980310_18_18,104430631)", + "equals(D_366980310_18_18,178420302)", + "equals(D_694503437_18_18,353358909)", + "equals(D_694503437_18_18,104430631)", + "doesNotEqual(D_694503437_18_18,104430631)", + "equals(D_775313030_18_18,353358909)", + "equals(D_775313030_18_18,104430631)", + "equals(D_775313030_18_18,178420302)", + "greaterThanOrEqual(D_860011428,19)", + "exists('D_686508359_19_19')", + "equals(D_366980310_19_19,353358909)", + "equals(D_366980310_19_19,104430631)", + "equals(D_366980310_19_19,178420302)", + "equals(D_694503437_19_19,353358909)", + "equals(D_694503437_19_19,104430631)", + "doesNotEqual(D_694503437_19_19,104430631)", + "equals(D_775313030_19_19,353358909)", + "equals(D_775313030_19_19,104430631)", + "equals(D_775313030_19_19,178420302)", + "greaterThanOrEqual(D_860011428,20)", + "exists('D_686508359_20_20')", + "equals(D_366980310_20_20,353358909)", + "equals(D_366980310_20_20,104430631)", + "equals(D_366980310_20_20,178420302)", + "equals(D_694503437_20_20,353358909)", + "equals(D_694503437_20_20,104430631)", + "doesNotEqual(D_694503437_20_20,104430631)", + "equals(D_775313030_20_20,353358909)", + "equals(D_775313030_20_20,104430631)", + "equals(D_775313030_20_20,178420302)", + "greaterThanOrEqual(D_860011428,21)", + "exists('D_686508359_21_21')", + "equals(D_366980310_21_21,353358909)", + "equals(D_366980310_21_21,104430631)", + "equals(D_366980310_21_21,178420302)", + "equals(D_694503437_21_21,353358909)", + "equals(D_694503437_21_21,104430631)", + "doesNotEqual(D_694503437_21_21,104430631)", + "equals(D_775313030_21_21,353358909)", + "equals(D_775313030_21_21,104430631)", + "equals(D_775313030_21_21,178420302)", + "greaterThanOrEqual(D_860011428,22)", + "exists('D_686508359_22_22')", + "equals(D_366980310_22_22,353358909)", + "equals(D_366980310_22_22,104430631)", + "equals(D_366980310_22_22,178420302)", + "equals(D_694503437_22_22,353358909)", + "equals(D_694503437_22_22,104430631)", + "doesNotEqual(D_694503437_22_22,104430631)", + "equals(D_775313030_22_22,353358909)", + "equals(D_775313030_22_22,104430631)", + "equals(D_775313030_22_22,178420302)", + "greaterThanOrEqual(D_860011428,23)", + "exists('D_686508359_23_23')", + "equals(D_366980310_23_23,353358909)", + "equals(D_366980310_23_23,104430631)", + "equals(D_366980310_23_23,178420302)", + "equals(D_694503437_23_23,353358909)", + "equals(D_694503437_23_23,104430631)", + "doesNotEqual(D_694503437_23_23,104430631)", + "equals(D_775313030_23_23,353358909)", + "equals(D_775313030_23_23,104430631)", + "equals(D_775313030_23_23,178420302)", + "greaterThanOrEqual(D_860011428,24)", + "exists('D_686508359_24_24')", + "equals(D_366980310_24_24,353358909)", + "equals(D_366980310_24_24,104430631)", + "equals(D_366980310_24_24,178420302)", + "equals(D_694503437_24_24,353358909)", + "equals(D_694503437_24_24,104430631)", + "doesNotEqual(D_694503437_24_24,104430631)", + "equals(D_775313030_24_24,353358909)", + "equals(D_775313030_24_24,104430631)", + "equals(D_775313030_24_24,178420302)", + "greaterThanOrEqual(D_860011428,25)", + "exists('D_686508359_25_25')", + "equals(D_366980310_25_25,353358909)", + "equals(D_366980310_25_25,104430631)", + "equals(D_366980310_25_25,178420302)", + "equals(D_694503437_25_25,353358909)", + "equals(D_694503437_25_25,104430631)", + "doesNotEqual(D_694503437_25_25,104430631)", + "equals(D_775313030_25_25,353358909)", + "equals(D_775313030_25_25,104430631)", + "equals(D_775313030_25_25,178420302)", + "and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(doesNotEqual(D_694503437_1_1,353358909),doesNotEqual(D_694503437_2_2,353358909)),doesNotEqual(D_694503437_3_3,353358909)),doesNotEqual(D_694503437_4_4,353358909)),doesNotEqual(D_694503437_5_5,353358909)),doesNotEqual(D_694503437_6_6,353358909)),doesNotEqual(D_694503437_7_7,353358909)),doesNotEqual(D_694503437_8_8,353358909)),doesNotEqual(D_694503437_9_9,353358909)),doesNotEqual(D_694503437_10_10,353358909)),doesNotEqual(D_694503437_11_11,353358909)),doesNotEqual(D_694503437_12_12,353358909)),doesNotEqual(D_694503437_13_13,353358909)),doesNotEqual(D_694503437_14_14,353358909)),doesNotEqual(D_694503437_15_15,353358909)),doesNotEqual(D_694503437_16_16,353358909)),doesNotEqual(D_694503437_17_17,353358909)),doesNotEqual(D_694503437_18_18,353358909)),doesNotEqual(D_694503437_19_19,353358909)),doesNotEqual(D_694503437_20_20,353358909)),doesNotEqual(D_694503437_21_21,353358909)),doesNotEqual(D_694503437_22_22,353358909)),doesNotEqual(D_694503437_23_23,353358909)),doesNotEqual(D_694503437_24_24,353358909)),doesNotEqual(D_694503437_25_25,353358909))", + "or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(equals(D_694503437_1_1,353358909),equals(D_694503437_2_2,353358909)),equals(D_694503437_3_3,353358909)),equals(D_694503437_4_4,353358909)),equals(D_694503437_5_5,353358909)),equals(D_694503437_6_6,353358909)),equals(D_694503437_7_7,353358909)),equals(D_694503437_8_8,353358909)),equals(D_694503437_9_9,353358909)),equals(D_694503437_10_10,353358909)),equals(D_694503437_11_11,353358909)),equals(D_694503437_12_12,353358909)),equals(D_694503437_13_13,353358909)),equals(D_694503437_14_14,353358909)),equals(D_694503437_15_15,353358909)),equals(D_694503437_16_16,353358909)),equals(D_694503437_17_17,353358909)),equals(D_694503437_18_18,353358909)),equals(D_694503437_19_19,353358909)),equals(D_694503437_20_20,353358909)),equals(D_694503437_21_21,353358909)),equals(D_694503437_22_22,353358909)),equals(D_694503437_23_23,353358909)),equals(D_694503437_24_24,353358909)),equals(D_694503437_25_25,353358909))", + "displayif=valueIsOneOf(\"D_110872086\",707601969) or valueLength(\"D_637540387\")>0", + "valueIsOneOf('D_110872086',707601969) or valueLength('D_637540387')>0", + "doesNotExist('D_637540387')", + "noneSelected(\"D_488415137_0\",\"D_488415137_1\",\"D_167695804_0\",\"D_167695804_1\",\"D_730334054_0\",\"D_730334054_1\",\"D_215996690_0\",\"D_215996690_1\",\"D_462737492_0\",\"D_462737492_1\",\"D_469675296_0\",\"D_469675296_1\",\"D_962475128_0\",\"D_962475128_1\",\"D_989576239_0\",\"D_989576239_1\",\"D_338613869_0\",\"D_338613869_1\",\"D_126794793_0\",\"D_126794793_1\",\"D_218793117_0\",\"D_218793117_1\",\"D_524096053_0\",\"D_524096053_1\",\"D_814101706_0\",\"D_814101706_1\",\"D_635026188_0\",\"D_635026188_1\",\"D_238135048_0\",\"D_238135048_1\",\"D_632714520_0\",\"D_632714520_1\")", + "someSelected(\"D_488415137_0\",\"D_488415137_1\",\"D_167695804_0\",\"D_167695804_1\",\"D_730334054_0\",\"D_730334054_1\",\"D_215996690_0\",\"D_215996690_1\",\"D_462737492_0\",\"D_462737492_1\",\"D_469675296_0\",\"D_469675296_1\",\"D_962475128_0\",\"D_962475128_1\",\"D_989576239_0\",\"D_989576239_1\",\"D_338613869_0\",\"D_338613869_1\",\"D_126794793_0\",\"D_126794793_1\",\"D_218793117_0\",\"D_218793117_1\",\"D_524096053_0\",\"SRVCOV_COV19C1_V1R0_1,1\",\"D_814101706_0\",\"D_814101706_1\",\"D_635026188_0\",\"D_238135048_0\",\"D_238135048_1\",\"D_632714520_0\",\"D_632714520_1", + "someSelected(%22D_488415137_0%22%2C%22D_488415137_1%22)", + "someSelected(%22D_730334054_0%22%2C%22D_730334054_1%22)", + "someSelected(%22D_215996690_0%22%2C%22D_215996690_1%22)", + "someSelected(%22D_462737492_0%22%2C%22D_462737492_1%22)", + "someSelected(%22D_469675296_0%22%2C%22D_469675296_1%22)", + "someSelected(%22D_167695804_0%22%2C%22D_167695804_1%22)", + "someSelected(%22D_524096053_0%22%2C%22D_524096053_1%22)", + "someSelected(%22D_814101706_0%22%2C%22D_814101706_1%22)", + "someSelected(%22D_962475128_0%22%2C%22D_962475128_1%22)", + "someSelected(%22D_989576239_0%22%2C%22D_989576239_1%22)", + "someSelected(%22D_338613869_0%22%2C%22D_338613869_1%22)", + "someSelected(%22D_126794793_0%22%2C%22D_126794793_1%22)", + "someSelected(%22D_218793117_0%22%2C%22D_218793117_1%22)", + "someSelected(%22D_635026188_0%22%2C%22D_635026188_1%22)", + "someSelected(%22D_238135048_0%22%2C%22D_238135048_1%22)", + "someSelected(%22D_632714520_0%22%2C%22D_632714520_1%22)", + "doesNotEqual(D_110872086,707601969)", + "equals(D_110872086,707601969)", + "exists('D_637540387')", + "and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(and(doesNotEqual(D_494226443,104430631),doesNotEqual(D_494226443,178420302)),doesNotEqual(isDefined(D_494226443,-1),-1)),doesNotEqual(D_498462481_1_1,104430631)),doesNotEqual(D_694503437_1_1,104430631)),doesNotEqual(D_498462481_2_2,104430631)),doesNotEqual(D_694503437_2_2,104430631)),doesNotEqual(D_498462481_3_3,104430631)),doesNotEqual(D_694503437_3_3,104430631)),doesNotEqual(D_498462481_4_4,104430631)),doesNotEqual(D_694503437_4_4,104430631)),doesNotEqual(D_498462481_5_5,104430631)),doesNotEqual(D_694503437_5_5,104430631)),doesNotEqual(D_498462481_6_6,104430631)),doesNotEqual(D_694503437_6_6,104430631)),doesNotEqual(D_498462481_7_7,104430631)),doesNotEqual(D_694503437_7_7,104430631)),doesNotEqual(D_498462481_8_8,104430631)),doesNotEqual(D_694503437_8_8,104430631)),doesNotEqual(D_498462481_9_9,104430631)),doesNotEqual(D_694503437_9_9,104430631)),doesNotEqual(D_498462481_10_10,104430631)),doesNotEqual(D_694503437_10_10,104430631)),doesNotEqual(D_498462481_11_11,104430631)),doesNotEqual(D_694503437_11_11,104430631)),doesNotEqual(D_498462481_12_12,104430631)),doesNotEqual(D_694503437_12_12,104430631)),doesNotEqual(D_498462481_13_13,104430631)),doesNotEqual(D_694503437_13_13,104430631)),doesNotEqual(D_498462481_14_14,104430631)),doesNotEqual(D_694503437_14_14,104430631)),doesNotEqual(D_498462481_15_15,104430631)),doesNotEqual(D_694503437_15_15,104430631)),doesNotEqual(D_498462481_16_16,104430631)),doesNotEqual(D_694503437_16_16,104430631)),doesNotEqual(D_498462481_17_17,104430631)),doesNotEqual(D_694503437_17_17,104430631)),doesNotEqual(D_498462481_18_18,104430631)),doesNotEqual(D_694503437_18_18,104430631)),doesNotEqual(D_498462481_19_19,104430631)),doesNotEqual(D_694503437_19_19,104430631)),doesNotEqual(D_498462481_20_20,104430631)),doesNotEqual(D_694503437_20_20,104430631)),doesNotEqual(D_498462481_21_21,104430631)),doesNotEqual(D_694503437_21_21,104430631)),doesNotEqual(D_498462481_22_22,104430631)),doesNotEqual(D_694503437_22_22,104430631)),doesNotEqual(D_498462481_23_23,104430631)),doesNotEqual(D_694503437_23_23,104430631)),doesNotEqual(D_498462481_24_24,104430631)),doesNotEqual(D_694503437_24_24,104430631)),doesNotEqual(D_498462481_25_25,104430631)),doesNotEqual(D_694503437_25_25,104430631))", + "or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(or(equals(D_494226443,104430631),equals(D_494226443,178420302)),equals(isDefined(D_494226443,-1),-1)),equals(D_498462481_1_1,104430631)),equals(D_694503437_1_1,104430631)),equals(D_498462481_2_2,104430631)),equals(D_694503437_2_2,104430631)),equals(D_498462481_3_3,104430631)),equals(D_694503437_3_3,104430631)),equals(D_498462481_4_4,104430631)),equals(D_694503437_4_4,104430631)),equals(D_498462481_5_5,104430631)),equals(D_694503437_5_5,104430631)),equals(D_498462481_6_6,104430631)),equals(D_694503437_6_6,104430631)),equals(D_498462481_7_7,104430631)),equals(D_694503437_7_7,104430631)),equals(D_498462481_8_8,104430631)),equals(D_694503437_8_8,104430631)),equals(D_498462481_9_9,104430631)),equals(D_694503437_9_9,104430631)),equals(D_498462481_10_10,104430631)),equals(D_694503437_10_10,104430631)),equals(D_498462481_11_11,104430631)),equals(D_694503437_11_11,104430631)),equals(D_498462481_12_12,104430631)),equals(D_694503437_12_12,104430631)),equals(D_498462481_13_13,104430631)),equals(D_694503437_13_13,104430631)),equals(D_498462481_14_14,104430631)),equals(D_694503437_14_14,104430631)),equals(D_498462481_15_15,104430631)),equals(D_694503437_15_15,104430631)),equals(D_498462481_16_16,104430631)),equals(D_694503437_16_16,104430631)),equals(D_498462481_17_17,104430631)),equals(D_694503437_17_17,104430631)),equals(D_498462481_18_18,104430631)),equals(D_694503437_18_18,104430631)),equals(D_498462481_19_19,104430631)),equals(D_694503437_19_19,104430631)),equals(D_498462481_20_20,104430631)),equals(D_694503437_20_20,104430631)),equals(D_498462481_21_21,104430631)),equals(D_694503437_21_21,104430631)),equals(D_498462481_22_22,104430631)),equals(D_694503437_22_22,104430631)),equals(D_498462481_23_23,104430631)),equals(D_694503437_23_23,104430631)),equals(D_498462481_24_24,104430631)),equals(D_694503437_24_24,104430631)),equals(D_498462481_25_25,104430631)),equals(D_694503437_25_25,104430631))", + "someSelected(\"D_874168085_0\",\"D_874168085_1\",\"D_283112988_0\",\"D_283112988_1\",\"D_580629349_0\",\"D_580629349_1\",\"D_151327643_0\",\"D_151327643_1\",\"D_440872808_0\",\"D_440872808_1\",\"D_874223830_0\",\"D_874223830_1\",\"D_847529903_0\",\"D_847529903_1\",\"D_219358831_0\",\"D_219358831_1\",\"D_636367178_0\",\"D_636367178_1\",\"D_243443780_0\",\"D_243443780_1\",\"D_357462273_0\",\"D_357462273_1\",\"D_638380747_0\",\"D_638380747_1\",\"D_187399900_0\",\"D_187399900_1\")", + "someSelected(%22D_874168085_0%22%2C%22D_874168085_1%22)", + "someSelected(%22D_283112988_0%22%2C%22D_283112988_1%22)", + "someSelected(%22D_580629349_0%22%2C%22D_580629349_1%22)", + "someSelected(%22D_151327643_0%22%2C%22D_151327643_1%22)", + "someSelected(%22D_440872808_0%22%2C%22D_440872808_1%22)", + "someSelected(%22D_874223830_0%22%2C%22D_874223830_1%22)", + "someSelected(%22D_847529903_0%22%2C%22D_847529903_1%22)", + "someSelected(%22D_219358831_0%22%2C%22D_219358831_1%22)", + "someSelected(%22D_636367178_0%22%2C%22D_636367178_1%22)", + "someSelected(%22D_243443780_0%22%2C%22D_243443780_1%22)", + "someSelected(%22D_357462273_0%22%2C%22D_357462273_1%22)", + "someSelected(%22D_638380747_0%22%2C%22D_638380747_1%22)", + "someSelected(%22D_187399900_0%22%2C%22D_187399900_1%22)", + "greaterThanOrEqual(D_877074400_V2,1)", + "equals(D_220055064_1_1,661871565)", + "equals(D_220055064_1_1,657978450)", + "equals(D_220055064_1_1,411943417)", + "equals(D_220055064_1_1,113838601)", + "equals(D_220055064_1_1,503154121)", + "valueIsOneOf('D_220055064_1_1',807835037) or valueLength('D_395747093_1_1')>0", + "equals(D_220055064_1_1,178420302)", + "greaterThanOrEqual(D_877074400_V2,2)", + "equals(D_220055064_2_2,661871565)", + "equals(D_220055064_2_2,657978450)", + "equals(D_220055064_2_2,411943417)", + "equals(D_220055064_2_2,113838601)", + "equals(D_220055064_2_2,503154121)", + "valueIsOneOf('D_220055064_2_2',807835037) or valueLength('D_395747093_2_2')>0", + "equals(D_220055064_2_2,178420302)", + "greaterThanOrEqual(D_877074400_V2,3)", + "equals(D_220055064_3_3,661871565)", + "equals(D_220055064_3_3,657978450)", + "equals(D_220055064_3_3,411943417)", + "equals(D_220055064_3_3,113838601)", + "equals(D_220055064_3_3,503154121)", + "valueIsOneOf('D_220055064_3_3',807835037) or valueLength('D_395747093_3_3')>0", + "equals(D_220055064_3_3,178420302)", + "greaterThanOrEqual(D_877074400_V2,4)", + "equals(D_220055064_4_4,661871565)", + "equals(D_220055064_4_4,657978450)", + "equals(D_220055064_4_4,411943417)", + "equals(D_220055064_4_4,113838601)", + "equals(D_220055064_4_4,503154121)", + "valueIsOneOf('D_220055064_4_4',807835037) or valueLength('D_395747093_4_4')>0", + "equals(D_220055064_4_4,178420302)", + "greaterThanOrEqual(D_877074400_V2,5)", + "equals(D_220055064_5_5,661871565)", + "equals(D_220055064_5_5,657978450)", + "equals(D_220055064_5_5,411943417)", + "equals(D_220055064_5_5,113838601)", + "equals(D_220055064_5_5,503154121)", + "valueIsOneOf('D_220055064_5_5',807835037) or valueLength('D_395747093_5_5')>0", + "equals(D_220055064_5_5,178420302)", + "greaterThanOrEqual(D_877074400_V2,6)", + "equals(D_220055064_6_6,661871565)", + "equals(D_220055064_6_6,657978450)", + "equals(D_220055064_6_6,411943417)", + "equals(D_220055064_6_6,113838601)", + "equals(D_220055064_6_6,503154121)", + "valueIsOneOf('D_220055064_6_6',807835037) or valueLength('D_395747093_6_6')>0", + "equals(D_220055064_6_6,178420302)", + "greaterThanOrEqual(D_877074400_V2,7)", + "equals(D_220055064_7_7,661871565)", + "equals(D_220055064_7_7,657978450)", + "equals(D_220055064_7_7,411943417)", + "equals(D_220055064_7_7,113838601)", + "equals(D_220055064_7_7,503154121)", + "valueIsOneOf('D_220055064_7_7',807835037) or valueLength('D_395747093_7_7')>0", + "equals(D_220055064_7_7,178420302)", + "greaterThanOrEqual(D_877074400_V2,8)", + "equals(D_220055064_8_8,661871565)", + "equals(D_220055064_8_8,657978450)", + "equals(D_220055064_8_8,411943417)", + "equals(D_220055064_8_8,113838601)", + "equals(D_220055064_8_8,503154121)", + "valueIsOneOf('D_220055064_8_8',807835037) or valueLength('D_395747093_8_8')>0", + "equals(D_220055064_8_8,178420302)", + "greaterThanOrEqual(D_877074400_V2,9)", + "equals(D_220055064_9_9,661871565)", + "equals(D_220055064_9_9,657978450)", + "equals(D_220055064_9_9,411943417)", + "equals(D_220055064_9_9,113838601)", + "equals(D_220055064_9_9,503154121)", + "valueIsOneOf('D_220055064_9_9',807835037) or valueLength('D_395747093_9_9')>0", + "equals(D_220055064_9_9,178420302)", + "greaterThanOrEqual(D_877074400_V2,10)", + "equals(D_220055064_10_10,661871565)", + "equals(D_220055064_10_10,657978450)", + "equals(D_220055064_10_10,411943417)", + "equals(D_220055064_10_10,113838601)", + "equals(D_220055064_10_10,503154121)", + "valueIsOneOf('D_220055064_10_10',807835037) or valueLength('D_395747093_10_10')>0", + "equals(D_220055064_10_10,178420302)", + "greaterThanOrEqual(D_877074400_V2,11)", + "equals(D_220055064_11_11,661871565)", + "equals(D_220055064_11_11,657978450)", + "equals(D_220055064_11_11,411943417)", + "equals(D_220055064_11_11,113838601)", + "equals(D_220055064_11_11,503154121)", + "valueIsOneOf('D_220055064_11_11',807835037) or valueLength('D_395747093_11_11')>0", + "equals(D_220055064_11_11,178420302)", + "greaterThanOrEqual(D_877074400_V2,12)", + "equals(D_220055064_12_12,661871565)", + "equals(D_220055064_12_12,657978450)", + "equals(D_220055064_12_12,411943417)", + "equals(D_220055064_12_12,113838601)", + "equals(D_220055064_12_12,503154121)", + "valueIsOneOf('D_220055064_12_12',807835037) or valueLength('D_395747093_12_12')>0", + "equals(D_220055064_12_12,178420302)", + "greaterThanOrEqual(D_877074400_V2,13)", + "equals(D_220055064_13_13,661871565)", + "equals(D_220055064_13_13,657978450)", + "equals(D_220055064_13_13,411943417)", + "equals(D_220055064_13_13,113838601)", + "equals(D_220055064_13_13,503154121)", + "valueIsOneOf('D_220055064_13_13',807835037) or valueLength('D_395747093_13_13')>0", + "equals(D_220055064_13_13,178420302)", + "greaterThanOrEqual(D_877074400_V2,14)", + "equals(D_220055064_14_14,661871565)", + "equals(D_220055064_14_14,657978450)", + "equals(D_220055064_14_14,411943417)", + "equals(D_220055064_14_14,113838601)", + "equals(D_220055064_14_14,503154121)", + "valueIsOneOf('D_220055064_14_14',807835037) or valueLength('D_395747093_14_14')>0", + "equals(D_220055064_14_14,178420302)", + "greaterThanOrEqual(D_877074400_V2,15)", + "equals(D_220055064_15_15,661871565)", + "equals(D_220055064_15_15,657978450)", + "equals(D_220055064_15_15,411943417)", + "equals(D_220055064_15_15,113838601)", + "equals(D_220055064_15_15,503154121)", + "valueIsOneOf('D_220055064_15_15',807835037) or valueLength('D_395747093_15_15')>0", + "equals(D_220055064_15_15,178420302)", + "greaterThanOrEqual(D_877074400_V2,16)", + "equals(D_220055064_16_16,661871565)", + "equals(D_220055064_16_16,657978450)", + "equals(D_220055064_16_16,411943417)", + "equals(D_220055064_16_16,113838601)", + "equals(D_220055064_16_16,503154121)", + "valueIsOneOf('D_220055064_16_16',807835037) or valueLength('D_395747093_16_16')>0", + "equals(D_220055064_16_16,178420302)", + "greaterThanOrEqual(D_877074400_V2,17)", + "equals(D_220055064_17_17,661871565)", + "equals(D_220055064_17_17,657978450)", + "equals(D_220055064_17_17,411943417)", + "equals(D_220055064_17_17,113838601)", + "equals(D_220055064_17_17,503154121)", + "valueIsOneOf('D_220055064_17_17',807835037) or valueLength('D_395747093_17_17')>0", + "equals(D_220055064_17_17,178420302)", + "greaterThanOrEqual(D_877074400_V2,18)", + "equals(D_220055064_18_18,661871565)", + "equals(D_220055064_18_18,657978450)", + "equals(D_220055064_18_18,411943417)", + "equals(D_220055064_18_18,113838601)", + "equals(D_220055064_18_18,503154121)", + "valueIsOneOf('D_220055064_18_18',807835037) or valueLength('D_395747093_18_18')>0", + "equals(D_220055064_18_18,178420302)", + "greaterThanOrEqual(D_877074400_V2,19)", + "equals(D_220055064_19_19,661871565)", + "equals(D_220055064_19_19,657978450)", + "equals(D_220055064_19_19,411943417)", + "equals(D_220055064_19_19,113838601)", + "equals(D_220055064_19_19,503154121)", + "valueIsOneOf('D_220055064_19_19',807835037) or valueLength('D_395747093_19_19')>0", + "equals(D_220055064_19_19,178420302)", + "greaterThanOrEqual(D_877074400_V2,20)", + "equals(D_220055064_20_20,661871565)", + "equals(D_220055064_20_20,657978450)", + "equals(D_220055064_20_20,411943417)", + "equals(D_220055064_20_20,113838601)", + "equals(D_220055064_20_20,503154121)", + "valueIsOneOf('D_220055064_20_20',807835037) or valueLength('D_395747093_20_20')>0", + "equals(D_220055064_20_20,178420302)", + "greaterThanOrEqual(D_877074400_V2,21)", + "equals(D_220055064_21_21,661871565)", + "equals(D_220055064_21_21,657978450)", + "equals(D_220055064_21_21,411943417)", + "equals(D_220055064_21_21,113838601)", + "equals(D_220055064_21_21,503154121)", + "valueIsOneOf('D_220055064_21_21',807835037) or valueLength('D_395747093_21_21')>0", + "equals(D_220055064_21_21,178420302)", + "greaterThanOrEqual(D_877074400_V2,22)", + "equals(D_220055064_22_22,661871565)", + "equals(D_220055064_22_22,657978450)", + "equals(D_220055064_22_22,411943417)", + "equals(D_220055064_22_22,113838601)", + "equals(D_220055064_22_22,503154121)", + "valueIsOneOf('D_220055064_22_22',807835037) or valueLength('D_395747093_22_22')>0", + "equals(D_220055064_22_22,178420302)", + "greaterThanOrEqual(D_877074400_V2,23)", + "equals(D_220055064_23_23,661871565)", + "equals(D_220055064_23_23,657978450)", + "equals(D_220055064_23_23,411943417)", + "equals(D_220055064_23_23,113838601)", + "equals(D_220055064_23_23,503154121)", + "valueIsOneOf('D_220055064_23_23',807835037) or valueLength('D_395747093_23_23')>0", + "equals(D_220055064_23_23,178420302)", + "greaterThanOrEqual(D_877074400_V2,24)", + "equals(D_220055064_24_24,661871565)", + "equals(D_220055064_24_24,657978450)", + "equals(D_220055064_24_24,411943417)", + "equals(D_220055064_24_24,113838601)", + "equals(D_220055064_24_24,503154121)", + "valueIsOneOf('D_220055064_24_24',807835037) or valueLength('D_395747093_24_24')>0", + "equals(D_220055064_24_24,178420302)", + "greaterThanOrEqual(D_877074400_V2,25)", + "equals(D_220055064_25_25,661871565)", + "equals(D_220055064_25_25,657978450)", + "equals(D_220055064_25_25,411943417)", + "equals(D_220055064_25_25,113838601)", + "equals(D_220055064_25_25,503154121)", + "valueIsOneOf('D_220055064_25_25',807835037) or valueLength('D_395747093_25_25')>0", + "equals(D_220055064_25_25,178420302)" + ], + "sitesByScope": { + "grid-row": 29, + "inline": 479, + "question": 589 + }, + "sitesByAttribute": { + "data-displayif": 29, + "displayif": 1068 + } + }, + "grids": [ + { + "questionId": "D_847578001", + "questionIndex": 505, + "rowQuestionIds": [ + "D_488415137", + "D_167695804", + "D_730334054", + "D_215996690", + "D_462737492", + "D_469675296" + ], + "rowCount": 6, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "724612102", + "178780048", + "244354126" + ] + }, + { + "questionId": "D_136730307", + "questionIndex": 506, + "rowQuestionIds": [ + "D_962475128", + "D_989576239", + "D_338613869", + "D_126794793", + "D_218793117" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "724612102", + "178780048", + "244354126" + ] + }, + { + "questionId": "D_751358419", + "questionIndex": 507, + "rowQuestionIds": [ + "D_524096053", + "D_814101706", + "D_635026188", + "D_238135048", + "D_632714520" + ], + "rowCount": 5, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "724612102", + "178780048", + "244354126" + ] + }, + { + "questionId": "D_114280729", + "questionIndex": 511, + "rowQuestionIds": [ + "D_374567479", + "D_966214244", + "D_109223043", + "D_368669706", + "D_605818246", + "D_790860504", + "D_336856410", + "D_518602598", + "D_770190369", + "D_994153376", + "D_481587023", + "D_590361055", + "D_108389123", + "D_747085418", + "D_702905707", + "D_986119909" + ], + "rowCount": 16, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "232063618", + "948148236", + "692824372" + ] + }, + { + "questionId": "D_813989715", + "questionIndex": 517, + "rowQuestionIds": [ + "D_874168085", + "D_283112988", + "D_580629349", + "D_151327643", + "D_440872808", + "D_874223830" + ], + "rowCount": 6, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "931688701", + "586272115", + "770236544" + ] + }, + { + "questionId": "D_857165713", + "questionIndex": 518, + "rowQuestionIds": [ + "D_847529903", + "D_219358831", + "D_636367178", + "D_243443780", + "D_357462273", + "D_638380747", + "D_187399900" + ], + "rowCount": 7, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "931688701", + "586272115", + "770236544" + ] + }, + { + "questionId": "D_749956170", + "questionIndex": 519, + "rowQuestionIds": [ + "D_527872064", + "D_691752394", + "D_143206081", + "D_431203595", + "D_516899143", + "D_223008071", + "D_599862694", + "D_860444009", + "D_246857412", + "D_144819886", + "D_304155106", + "D_830581863", + "D_463689026" + ], + "rowCount": 13, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "232063618", + "948148236", + "692824372" + ] + } + ], + "loops": [ + { + "loopIndex": "1", + "loopMaxQuestionIds": [ + "D_860011428" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 3, + 23, + 43, + 63, + 83, + 103, + 123, + 143, + 163, + 183, + 203, + 223, + 243, + 263, + 283, + 303, + 323, + 343, + 363, + 383, + 403, + 423, + 443, + 463, + 483 + ], + "boundaryIndex": 503 + }, + { + "loopIndex": "2", + "loopMaxQuestionIds": [ + "D_877074400_V2" + ], + "iterationCount": 25, + "iterationStartIndexes": [ + 523, + 526, + 529, + 532, + 535, + 538, + 541, + 544, + 547, + 550, + 553, + 556, + 559, + 562, + 565, + 568, + 571, + 574, + 577, + 580, + 583, + 586, + 589, + 592, + 595 + ], + "boundaryIndex": 598 + } + ], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 97, + "processorQuestionCount": 600, + "processedQuestionCount": 600, + "renderedFormCount": 600, + "controlCount": 3922, + "responseControlCount": 1970, + "explicitTransitionCount": 540, + "sequentialAdjacencyCount": 599, + "resolvedExplicitTransitionCount": 540, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 1097, + "gridQuestionCount": 7, + "gridRowCount": 58, + "loopStartCount": 50, + "loopDefinitionCount": 2, + "loopExpandedQuestionCount": 575, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 517 + } + }, + { + "schemaVersion": 1, + "module": "moduleCancerScreeningHistory", + "locale": "en", + "language": "en", + "path": "prod/moduleCancerScreeningHistory.txt", + "sha256": "65207c189b9b62836afc43cb80c12b416612b3d246a71d257804e0924c7817b2", + "questName": "D_369168474", + "version": "1.2", + "authoredMarkerCount": 144, + "runtimeQuestionIds": [ + "SRVSCR_INTROSCREEN_V1R0", + "D_890391968?", + "D_413039729?", + "D_729984625?", + "D_675055475?", + "D_250003172?", + "D_341080024?", + "D_841573821?", + "D_976626196?", + "D_951847507?", + "D_998519118?", + "D_645149364?", + "D_839555631?", + "D_506456253?", + "D_439760665?", + "D_950690103?", + "D_975268706?", + "D_277890744?", + "D_936444833?", + "D_758881441?", + "D_765772509?", + "D_250353250?", + "D_116546181?", + "D_496928179?", + "D_166524009?", + "D_367942006?", + "D_907385951?", + "D_350184001?", + "D_522645663?", + "D_590067228?", + "D_787505819?", + "D_860839849?", + "D_949587133?", + "D_671670265?", + "D_429157727?", + "D_314345103?", + "D_292314539?", + "D_343990595?", + "D_203366781?", + "SRVSCR_ORSCREENINT_V1R0", + "D_802157786?", + "D_852697610?", + "D_860253133?", + "D_682440005?", + "D_339142996?", + "D_375662706?", + "D_859197222?", + "D_529358901?", + "D_365148290?", + "D_988661374?", + "D_619830872?", + "D_226488112?", + "D_884856351?", + "D_900561740?", + "D_729390410?", + "D_869938650?", + "D_541338917?", + "D_833553697?", + "D_689280509?", + "D_108417657?", + "D_822995885?", + "D_677043723?", + "D_960218176?", + "D_806961194?", + "D_129025755?", + "D_702922820?", + "D_236655642?", + "D_581174597?", + "D_524918714?", + "D_584375130?", + "D_221189280?", + "D_737402324?", + "D_552399966?", + "D_124071431?", + "D_113343940?", + "D_925516907?", + "D_506482920?", + "D_991871399?", + "D_761831751?", + "D_588828383?", + "D_485867936?", + "D_465056475?", + "D_718137053?", + "D_199704727?", + "D_621714179?", + "D_772645761?", + "D_650508014?", + "D_903059223?", + "D_214352460?", + "D_770939852?", + "D_423202492?", + "D_961267001?", + "D_745742553?", + "D_111580947?", + "D_709088568?", + "D_372457715?", + "D_315184598?", + "D_560107274?", + "D_569358384?", + "D_305769587?", + "D_434993234?", + "D_846067697?", + "D_861488320?", + "D_891793989?", + "D_811848389?", + "D_957875649?", + "D_406370140?", + "D_951078002?", + "D_631089527?", + "D_475018570?", + "D_227617345?", + "D_274709835?", + "D_229764995?", + "D_934385625?", + "D_393386163?", + "D_856699079?", + "D_723960145?", + "D_353889236?", + "D_242001363?", + "D_623413449?", + "D_153215425?", + "D_115504049?", + "D_356470898?", + "D_947994136?", + "D_898341670?", + "D_913107034?", + "D_655198446?", + "D_809308794?", + "D_766549014?", + "D_496588916?", + "D_104842019?", + "D_315199788?", + "D_249853484?", + "D_391300412?", + "D_808990505?", + "D_219076879?", + "D_822790675?", + "D_459223565?", + "D_397748152?", + "D_553034408?", + "D_698242759?", + "D_695772621?", + "D_431721131?", + "END" + ], + "responseControlsByType": { + "checkbox": 71, + "number": 56, + "radio": 553, + "text": 1 + }, + "explicitTransitions": { + "targets": [ + "D_675055475", + "D_250003172", + "D_341080024", + "D_841573821", + "D_976626196", + "D_951847507", + "D_645149364", + "D_839555631", + "D_506456253", + "D_350184001", + "D_522645663", + "D_590067228", + "D_860839849", + "D_671670265", + "D_429157727", + "D_292314539", + "D_203366781", + "SRVSCR_ORSCREENINT_V1R0", + "D_998519118", + "D_439760665", + "D_950690103", + "D_975268706", + "D_277890744", + "D_936444833", + "D_758881441", + "D_765772509", + "D_166524009", + "D_367942006", + "D_907385951", + "D_250353250", + "D_116546181", + "D_496928179", + "D_787505819", + "D_949587133", + "D_314345103", + "D_343990595", + "D_365148290", + "D_339142996", + "D_988661374", + "D_884856351", + "D_869938650", + "D_689280509", + "D_677043723", + "D_129025755", + "D_619830872", + "D_226488112", + "D_900561740", + "D_729390410", + "D_541338917", + "D_833553697", + "D_108417657", + "D_822995885", + "D_960218176", + "D_806961194", + "D_524918714", + "D_552399966", + "D_991871399", + "D_113343940", + "D_925516907", + "D_506482920", + "D_465056475", + "D_718137053", + "D_772645761", + "D_214352460", + "D_961267001", + "D_199704727", + "D_621714179", + "D_650508014", + "D_903059223", + "D_770939852", + "D_423202492", + "D_745742553", + "D_315184598", + "D_305769587", + "D_861488320", + "D_957875649", + "D_111580947", + "D_372457715", + "D_709088568", + "D_560107274", + "D_569358384", + "D_434993234", + "D_846067697", + "D_891793989", + "D_811848389", + "D_406370140", + "D_475018570", + "D_229764995", + "D_951078002", + "D_631089527", + "D_227617345", + "D_274709835", + "D_934385625", + "D_723960145", + "D_623413449", + "D_356470898", + "D_393386163", + "D_856699079", + "D_353889236", + "D_242001363", + "D_153215425", + "D_115504049", + "D_947994136", + "D_655198446", + "D_496588916", + "D_249853484", + "D_219076879", + "D_898341670", + "D_913107034", + "D_809308794", + "D_766549014", + "D_104842019", + "D_315199788", + "D_391300412", + "D_808990505", + "D_822790675", + "D_553034408", + "D_431721131", + "D_459223565", + "D_397748152", + "D_698242759", + "D_695772621" + ], + "byKind": { + "default": 36, + "no-response": 13, + "response": 188 + }, + "byResolution": { + "exact": 237 + }, + "triggerTypes": { + "checkbox": 51, + "hidden": 49, + "radio": 137 + }, + "triggerValues": [ + "797189152", + "633546100", + "866002271", + "209101810", + "413734739", + "215525943", + "118789503", + "715563991", + "533491176", + "220755749", + "465318416", + "630100221", + "692881833", + "654450030", + "532603425", + "733236542", + "961987554", + "113771607", + "668256654", + "752953170", + "325506683", + "335563082", + "955881350", + "492902023", + "256196714", + "802859122", + "520432394", + "667901971", + "807835037", + "308633554", + "967156738", + "535003378", + "333647143", + "109972911", + "448068764", + "537173119", + "770550588", + "970716952", + "524029283", + "500023550", + "104430631", + "178420302", + "236949684", + "203210013", + "219088015", + "283265038", + "691148901", + "928432579", + "506053626", + "462661976", + "119809731", + "282580702", + "934779560", + "956827502", + "312250694", + "255054078", + "492921091", + "577887061", + "419571068", + "726183532", + "898042848", + "903156464", + "474921307", + "405616098", + "646114392", + "673135412", + "687879041", + "531274737", + "650022485", + "891052313", + "875157431", + "309925717" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "valueIsOneOf(\"D_951847507\",113771607,668256654)", + "equals(D_506456253,752953170)", + "equals(D_506456253,325506683)", + "equals(D_506456253,335563082)", + "equals(D_506456253,955881350)", + "equals(D_506456253,492902023)", + "equals(D_506456253,256196714)", + "equals(D_506456253,802859122)", + "equals(D_765772509,308633554)", + "equals(D_765772509,967156738)", + "equals(D_506456253,520432394)", + "equals(D_506456253,667901971)", + "equals(D_506456253,807835037)", + "exists('D_942347130')", + "doesNotExist('D_942347130')", + "valueIsOneOf(\"D_590067228\",333647143,109972911)", + "equals(D_729984625,692881833)", + "valueIsOneOf(\"D_860839849\",448068764,537173119)", + "valueIsOneOf(\"D_429157727\",770550588,970716952)", + "valueIsOneOf(\"D_292314539\",524029283,500023550)", + "equals(D_802157786,353358909)", + "equals(D_339142996,353358909)", + "equals(D_365148290,203210013)", + "valueIsOneOf(\"D_619830872\",506053626,462661976,178420302)", + "equals(D_365148290,219088015)", + "valueIsOneOf(\"D_900561740\",506053626,462661976,178420302)", + "equals(D_365148290,283265038)", + "valueIsOneOf(\"D_541338917\",506053626,462661976,178420302)", + "equals(D_365148290,691148901)", + "valueIsOneOf(\"D_108417657\",506053626,462661976,178420302)", + "equals(D_365148290,928432579)", + "valueIsOneOf(\"D_960218176\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_129025755,353358909)", + "valueIsOneOf(\"D_236655642\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_524918714,353358909)", + "valueIsOneOf(\"D_221189280\",506053626,462661976,178420302)", + "equals(D_552399966,353358909)", + "valueIsOneOf(\"D_925516907\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_991871399,353358909)", + "valueIsOneOf(\"D_588828383\",506053626,462661976,178420302)", + "or(equals(D_890391968,700100953),equals(D_729984625,733236542))", + "equals(D_465056475,312250694)", + "valueIsOneOf(\"D_199704727\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_465056475,255054078)", + "valueIsOneOf(\"D_650508014\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_465056475,492921091)", + "valueIsOneOf(\"D_770939852\",506053626,462661976,178420302)", + "valueIsOneOf(\"D_413039729\",145235510,801218076)", + "equals(D_961267001,577887061)", + "valueIsOneOf(\"D_111580947\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_961267001,419571068)", + "valueIsOneOf(\"D_560107274\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_961267001,726183532)", + "valueIsOneOf(\"D_434993234\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_961267001,898042848)", + "valueIsOneOf(\"D_891793989\",506053626,119809731,282580702,934779560,178420302)", + "or(or(equals(D_890391968,434651539),equals(D_729984625,220755749)),equals(D_729984625,630100221))", + "equals(D_957875649,903156464)", + "valueIsOneOf(\"D_951078002\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_957875649,474921307)", + "valueIsOneOf(\"D_227617345\",506053626,119809731,282580702,934779560,178420302)", + "or(equals(D_890391968,505282171),equals(D_729984625,220755749))", + "equals(D_229764995,405616098)", + "valueIsOneOf(\"D_393386163\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_229764995,646114392)", + "valueIsOneOf(\"D_353889236\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_229764995,673135412)", + "valueIsOneOf(\"D_153215425\",506053626,119809731,282580702,934779560,178420302)", + "or(equals(D_890391968,578416151),equals(D_729984625,220755749))", + "equals(D_356470898,687879041)", + "valueIsOneOf(\"D_898341670\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_356470898,531274737)", + "valueIsOneOf(\"D_809308794\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_356470898,650022485)", + "valueIsOneOf(\"D_104842019\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_356470898,891052313)", + "valueIsOneOf(\"D_391300412\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_219076879,875157431)", + "valueIsOneOf(\"D_459223565\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_219076879,309925717)", + "valueIsOneOf(\"D_698242759\",506053626,119809731,282580702,934779560,178420302)" + ], + "sitesByScope": { + "inline": 2, + "question": 105 + }, + "sitesByAttribute": { + "displayif": 107 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 144, + "processorQuestionCount": 144, + "processedQuestionCount": 144, + "renderedFormCount": 144, + "controlCount": 1158, + "responseControlCount": 681, + "explicitTransitionCount": 237, + "sequentialAdjacencyCount": 143, + "resolvedExplicitTransitionCount": 237, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 107, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 81 + } + }, + { + "schemaVersion": 1, + "module": "moduleCancerScreeningHistory", + "locale": "es", + "language": "es", + "path": "prod/moduleCancerScreeningHistorySpanish.txt", + "sha256": "dd93c2e963d9c0f2eb202667a45748ca576aefed4157f315a6e8ddef95eb7c38", + "questName": "D_369168474", + "version": "1.2", + "authoredMarkerCount": 144, + "runtimeQuestionIds": [ + "SRVSCR_INTROSCREEN_V1R0", + "D_890391968?", + "D_413039729?", + "D_729984625?", + "D_675055475?", + "D_250003172?", + "D_341080024?", + "D_841573821?", + "D_976626196?", + "D_951847507?", + "D_998519118?", + "D_645149364?", + "D_839555631?", + "D_506456253?", + "D_439760665?", + "D_950690103?", + "D_975268706?", + "D_277890744?", + "D_936444833?", + "D_758881441?", + "D_765772509?", + "D_250353250?", + "D_116546181?", + "D_496928179?", + "D_166524009?", + "D_367942006?", + "D_907385951?", + "D_350184001?", + "D_522645663?", + "D_590067228?", + "D_787505819?", + "D_860839849?", + "D_949587133?", + "D_671670265?", + "D_429157727?", + "D_314345103?", + "D_292314539?", + "D_343990595?", + "D_203366781?", + "SRVSCR_ORSCREENINT_V1R0", + "D_802157786?", + "D_852697610?", + "D_860253133?", + "D_682440005?", + "D_339142996?", + "D_375662706?", + "D_859197222?", + "D_529358901?", + "D_365148290?", + "D_988661374?", + "D_619830872?", + "D_226488112?", + "D_884856351?", + "D_900561740?", + "D_729390410?", + "D_869938650?", + "D_541338917?", + "D_833553697?", + "D_689280509?", + "D_108417657?", + "D_822995885?", + "D_677043723?", + "D_960218176?", + "D_806961194?", + "D_129025755?", + "D_702922820?", + "D_236655642?", + "D_581174597?", + "D_524918714?", + "D_584375130?", + "D_221189280?", + "D_737402324?", + "D_552399966?", + "D_124071431?", + "D_113343940?", + "D_925516907?", + "D_506482920?", + "D_991871399?", + "D_761831751?", + "D_588828383?", + "D_485867936?", + "D_465056475?", + "D_718137053?", + "D_199704727?", + "D_621714179?", + "D_772645761?", + "D_650508014?", + "D_903059223?", + "D_214352460?", + "D_770939852?", + "D_423202492?", + "D_961267001?", + "D_745742553?", + "D_111580947?", + "D_709088568?", + "D_372457715?", + "D_315184598?", + "D_560107274?", + "D_569358384?", + "D_305769587?", + "D_434993234?", + "D_846067697?", + "D_861488320?", + "D_891793989?", + "D_811848389?", + "D_957875649?", + "D_406370140?", + "D_951078002?", + "D_631089527?", + "D_475018570?", + "D_227617345?", + "D_274709835?", + "D_229764995?", + "D_934385625?", + "D_393386163?", + "D_856699079?", + "D_723960145?", + "D_353889236?", + "D_242001363?", + "D_623413449?", + "D_153215425?", + "D_115504049?", + "D_356470898?", + "D_947994136?", + "D_898341670?", + "D_913107034?", + "D_655198446?", + "D_809308794?", + "D_766549014?", + "D_496588916?", + "D_104842019?", + "D_315199788?", + "D_249853484?", + "D_391300412?", + "D_808990505?", + "D_219076879?", + "D_822790675?", + "D_459223565?", + "D_397748152?", + "D_553034408?", + "D_698242759?", + "D_695772621?", + "D_431721131?", + "END" + ], + "responseControlsByType": { + "checkbox": 71, + "number": 56, + "radio": 553, + "text": 1 + }, + "explicitTransitions": { + "targets": [ + "D_675055475", + "D_250003172", + "D_341080024", + "D_841573821", + "D_976626196", + "D_951847507", + "D_645149364", + "D_839555631", + "D_506456253", + "D_350184001", + "D_522645663", + "D_590067228", + "D_860839849", + "D_671670265", + "D_429157727", + "D_292314539", + "D_203366781", + "SRVSCR_ORSCREENINT_V1R0", + "D_998519118", + "D_439760665", + "D_950690103", + "D_975268706", + "D_277890744", + "D_936444833", + "D_758881441", + "D_765772509", + "D_166524009", + "D_367942006", + "D_907385951", + "D_250353250", + "D_116546181", + "D_496928179", + "D_787505819", + "D_949587133", + "D_314345103", + "D_343990595", + "D_365148290", + "D_339142996", + "D_988661374", + "D_884856351", + "D_869938650", + "D_689280509", + "D_677043723", + "D_129025755", + "D_619830872", + "D_226488112", + "D_900561740", + "D_729390410", + "D_541338917", + "D_833553697", + "D_108417657", + "D_822995885", + "D_960218176", + "D_806961194", + "D_524918714", + "D_552399966", + "D_991871399", + "D_113343940", + "D_925516907", + "D_506482920", + "D_465056475", + "D_718137053", + "D_772645761", + "D_214352460", + "D_961267001", + "D_199704727", + "D_621714179", + "D_650508014", + "D_903059223", + "D_770939852", + "D_423202492", + "D_745742553", + "D_315184598", + "D_305769587", + "D_861488320", + "D_957875649", + "D_111580947", + "D_372457715", + "D_709088568", + "D_560107274", + "D_569358384", + "D_434993234", + "D_846067697", + "D_891793989", + "D_811848389", + "D_406370140", + "D_475018570", + "D_229764995", + "D_951078002", + "D_631089527", + "D_227617345", + "D_274709835", + "D_934385625", + "D_723960145", + "D_623413449", + "D_356470898", + "D_393386163", + "D_856699079", + "D_353889236", + "D_242001363", + "D_153215425", + "D_115504049", + "D_947994136", + "D_655198446", + "D_496588916", + "D_249853484", + "D_219076879", + "D_898341670", + "D_913107034", + "D_809308794", + "D_766549014", + "D_104842019", + "D_315199788", + "D_391300412", + "D_808990505", + "D_822790675", + "D_553034408", + "D_431721131", + "D_459223565", + "D_397748152", + "D_698242759", + "D_695772621" + ], + "byKind": { + "default": 36, + "no-response": 13, + "response": 188 + }, + "byResolution": { + "exact": 237 + }, + "triggerTypes": { + "checkbox": 51, + "hidden": 49, + "radio": 137 + }, + "triggerValues": [ + "797189152", + "633546100", + "866002271", + "209101810", + "413734739", + "215525943", + "118789503", + "715563991", + "533491176", + "220755749", + "465318416", + "630100221", + "692881833", + "654450030", + "532603425", + "733236542", + "961987554", + "113771607", + "668256654", + "752953170", + "325506683", + "335563082", + "955881350", + "492902023", + "256196714", + "802859122", + "520432394", + "667901971", + "807835037", + "308633554", + "967156738", + "535003378", + "333647143", + "109972911", + "448068764", + "537173119", + "770550588", + "970716952", + "524029283", + "500023550", + "104430631", + "178420302", + "236949684", + "203210013", + "219088015", + "283265038", + "691148901", + "928432579", + "506053626", + "462661976", + "119809731", + "282580702", + "934779560", + "956827502", + "312250694", + "255054078", + "492921091", + "577887061", + "419571068", + "726183532", + "898042848", + "903156464", + "474921307", + "405616098", + "646114392", + "673135412", + "687879041", + "531274737", + "650022485", + "891052313", + "875157431", + "309925717" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "valueIsOneOf(\"D_951847507\",113771607,668256654)", + "equals(D_506456253,752953170)", + "equals(D_506456253,325506683)", + "equals(D_506456253,335563082)", + "equals(D_506456253,955881350)", + "equals(D_506456253,492902023)", + "equals(D_506456253,256196714)", + "equals(D_506456253,802859122)", + "equals(D_765772509,308633554)", + "equals(D_765772509,967156738)", + "equals(D_506456253,520432394)", + "equals(D_506456253,667901971)", + "equals(D_506456253,807835037)", + "exists('D_942347130')", + "doesNotExist('D_942347130')", + "valueIsOneOf(\"D_590067228\",333647143,109972911)", + "valueIsOneOf(\"D_860839849\",448068764,537173119)", + "valueIsOneOf(\"D_429157727\",770550588,970716952)", + "valueIsOneOf(\"D_292314539\",524029283,500023550)", + "equals(D_802157786,353358909)", + "equals(D_339142996,353358909)", + "equals(D_365148290,203210013)", + "valueIsOneOf(\"D_619830872\",506053626,462661976,178420302)", + "equals(D_365148290,219088015)", + "valueIsOneOf(\"D_900561740\",506053626,462661976,178420302)", + "equals(D_365148290,283265038)", + "valueIsOneOf(\"D_541338917\",506053626,462661976,178420302)", + "equals(D_365148290,691148901)", + "valueIsOneOf(\"D_108417657\",506053626,462661976,178420302)", + "equals(D_365148290,928432579)", + "valueIsOneOf(\"D_960218176\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_129025755,353358909)", + "valueIsOneOf(\"D_236655642\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_524918714,353358909)", + "valueIsOneOf(\"D_221189280\",506053626,462661976,178420302)", + "equals(D_552399966,353358909)", + "valueIsOneOf(\"D_925516907\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_991871399,353358909)", + "valueIsOneOf(\"D_588828383\",506053626,462661976,178420302)", + "or(equals(D_890391968,700100953),equals(D_729984625,733236542))", + "equals(D_465056475,312250694)", + "valueIsOneOf(\"D_199704727\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_465056475,255054078)", + "valueIsOneOf(\"D_650508014\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_465056475,492921091)", + "valueIsOneOf(\"D_770939852\",506053626,462661976,178420302)", + "valueIsOneOf(\"D_413039729\",145235510,801218076)", + "equals(D_961267001,577887061)", + "valueIsOneOf(\"D_111580947\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_961267001,419571068)", + "valueIsOneOf(\"D_560107274\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_961267001,726183532)", + "valueIsOneOf(\"D_434993234\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_961267001,898042848)", + "valueIsOneOf(\"D_891793989\",506053626,119809731,282580702,934779560,178420302)", + "or(or(equals(D_890391968,434651539),equals(D_729984625,220755749)),equals(D_729984625,630100221))", + "equals(D_957875649,903156464)", + "valueIsOneOf(\"D_951078002\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_957875649,474921307)", + "valueIsOneOf(\"D_227617345\",506053626,119809731,282580702,934779560,178420302)", + "or(equals(D_890391968,505282171),equals(D_729984625,220755749))", + "equals(D_229764995,405616098)", + "valueIsOneOf(\"D_393386163\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_229764995,646114392)", + "valueIsOneOf(\"D_353889236\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_229764995,673135412)", + "valueIsOneOf(\"D_153215425\",506053626,119809731,282580702,934779560,178420302)", + "or(equals(D_890391968,578416151),equals(D_729984625,220755749))", + "equals(D_356470898,687879041)", + "valueIsOneOf(\"D_898341670\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_356470898,531274737)", + "valueIsOneOf(\"D_809308794\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_356470898,650022485)", + "valueIsOneOf(\"D_104842019\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_356470898,891052313)", + "valueIsOneOf(\"D_391300412\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_219076879,875157431)", + "valueIsOneOf(\"D_459223565\",506053626,119809731,282580702,934779560,178420302)", + "equals(D_219076879,309925717)", + "valueIsOneOf(\"D_698242759\",506053626,119809731,282580702,934779560,178420302)" + ], + "sitesByScope": { + "inline": 2, + "question": 104 + }, + "sitesByAttribute": { + "displayif": 106 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 144, + "processorQuestionCount": 144, + "processedQuestionCount": 144, + "renderedFormCount": 144, + "controlCount": 1158, + "responseControlCount": 681, + "explicitTransitionCount": 237, + "sequentialAdjacencyCount": 143, + "resolvedExplicitTransitionCount": 237, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 106, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 80 + } + }, + { + "schemaVersion": 1, + "module": "moduleClinicalBloodUrine", + "locale": "en", + "language": "en", + "path": "prod/moduleClinicalBloodUrine.txt", + "sha256": "da2014adad00d371c0044fdfe1095af570e253c293ea3e88023045d51762a91e", + "questName": "D_826163434", + "version": "1.4", + "authoredMarkerCount": 21, + "runtimeQuestionIds": [ + "SRVBIO_MODULEINTRO_V1R0", + "D_522008539?", + "D_470484596?", + "D_867307558?", + "D_191057574_V2?", + "D_299417266_V2?", + "D_689861450_V2?", + "D_487532606", + "SRVBLU_REPROINTRO_V1R0", + "D_380603392!", + "D_112151599!", + "D_644459734!", + "D_518916981?", + "D_234714655?", + "D_798452445?", + "D_563539159?", + "D_875535246?", + "D_130311122?", + "END" + ], + "responseControlsByType": { + "checkbox": 6, + "date": 1, + "radio": 36, + "time": 3 + }, + "explicitTransitions": { + "targets": [ + "D_299417266_V2", + "D_518916981", + "D_798452445", + "D_875535246" + ], + "byKind": { + "response": 5 + }, + "byResolution": { + "exact": 5 + }, + "triggerTypes": { + "radio": 5 + }, + "triggerValues": [ + "330461666", + "104430631", + "353358909" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_522008539,536341288)", + "equals(D_518916981,104430631)" + ], + "sitesByScope": { + "question": 10 + }, + "sitesByAttribute": { + "displayif": 10 + } + }, + "grids": [ + { + "questionId": "D_487532606", + "questionIndex": 7, + "rowQuestionIds": [ + "D_619765650", + "D_520755310", + "D_839329467" + ], + "rowCount": 3, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "104430631", + "974230748", + "936042740", + "731141335", + "591670915" + ] + } + ], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 21, + "processorQuestionCount": 19, + "processedQuestionCount": 19, + "renderedFormCount": 19, + "controlCount": 99, + "responseControlCount": 46, + "explicitTransitionCount": 5, + "sequentialAdjacencyCount": 18, + "resolvedExplicitTransitionCount": 5, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 10, + "gridQuestionCount": 1, + "gridRowCount": 3, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 2 + } + }, + { + "schemaVersion": 1, + "module": "moduleClinicalBloodUrine", + "locale": "es", + "language": "es", + "path": "prod/moduleClinicalBloodUrineSpanish.txt", + "sha256": "2898151d137c3f33ecf857b4f82561d6c42ae0c6c1947d47a1317ba24c9de987", + "questName": "D_826163434", + "version": "1.4", + "authoredMarkerCount": 21, + "runtimeQuestionIds": [ + "SRVBIO_MODULEINTRO_V1R0", + "D_522008539?", + "D_470484596?", + "D_867307558?", + "D_191057574_V2?", + "D_299417266_V2?", + "D_689861450_V2?", + "D_487532606", + "SRVBLU_REPROINTRO_V1R0", + "D_380603392!", + "D_112151599!", + "D_644459734!", + "D_518916981?", + "D_234714655?", + "D_798452445?", + "D_563539159?", + "D_875535246?", + "D_130311122?", + "END" + ], + "responseControlsByType": { + "checkbox": 6, + "date": 1, + "radio": 36, + "time": 3 + }, + "explicitTransitions": { + "targets": [ + "D_299417266_V2", + "D_518916981", + "D_798452445", + "D_875535246" + ], + "byKind": { + "response": 5 + }, + "byResolution": { + "exact": 5 + }, + "triggerTypes": { + "radio": 5 + }, + "triggerValues": [ + "330461666", + "104430631", + "353358909" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_522008539,536341288)", + "equals(D_518916981,104430631)" + ], + "sitesByScope": { + "question": 10 + }, + "sitesByAttribute": { + "displayif": 10 + } + }, + "grids": [ + { + "questionId": "D_487532606", + "questionIndex": 7, + "rowQuestionIds": [ + "D_619765650", + "D_520755310", + "D_839329467" + ], + "rowCount": 3, + "responseTypes": [ + "radio" + ], + "responseValues": [ + "104430631", + "974230748", + "936042740", + "731141335", + "591670915" + ] + } + ], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 21, + "processorQuestionCount": 19, + "processedQuestionCount": 19, + "renderedFormCount": 19, + "controlCount": 99, + "responseControlCount": 46, + "explicitTransitionCount": 5, + "sequentialAdjacencyCount": 18, + "resolvedExplicitTransitionCount": 5, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 10, + "gridQuestionCount": 1, + "gridRowCount": 3, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 2 + } + }, + { + "schemaVersion": 1, + "module": "moduleDietScreener", + "locale": "en", + "language": "en", + "path": "prod/moduleDietScreener", + "sha256": "bfe990625139d13c6125245a441c8fcb666bcbac905e577ef374df8f708f5dca", + "questName": "D_515124081", + "version": "1.0", + "authoredMarkerCount": 3, + "runtimeQuestionIds": [ + "INTRO_SRVDSQ", + "D_916948380?", + "END" + ], + "responseControlsByType": { + "radio": 157 + }, + "explicitTransitions": { + "targets": [], + "byKind": {}, + "byResolution": {}, + "triggerTypes": {}, + "triggerValues": [], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [], + "sitesByScope": {}, + "sitesByAttribute": {} + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 3, + "processorQuestionCount": 3, + "processedQuestionCount": 3, + "renderedFormCount": 3, + "controlCount": 163, + "responseControlCount": 157, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 2, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 0 + } + }, + { + "schemaVersion": 1, + "module": "moduleDietScreener", + "locale": "es", + "language": "es", + "path": "prod/moduleDietScreenerSpanish.txt", + "sha256": "40a21887c151720e2ce65450154e0ab8b21f5d94c6324de3f8417b35e2d5564a", + "questName": "D_515124081", + "version": "1.0", + "authoredMarkerCount": 3, + "runtimeQuestionIds": [ + "INTRO_SRVDSQ", + "D_916948380?", + "END" + ], + "responseControlsByType": { + "radio": 157 + }, + "explicitTransitions": { + "targets": [], + "byKind": {}, + "byResolution": {}, + "triggerTypes": {}, + "triggerValues": [], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [], + "sitesByScope": {}, + "sitesByAttribute": {} + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 3, + "processorQuestionCount": 3, + "processedQuestionCount": 3, + "renderedFormCount": 3, + "controlCount": 163, + "responseControlCount": 157, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 2, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 0 + } + }, + { + "schemaVersion": 1, + "module": "moduleMenstrual", + "locale": "en", + "language": "en", + "path": "prod/moduleMenstrual.txt", + "sha256": "13de3a43aed31befdda5be4c805a3b885e36df9275f742a19ca931e360e159b2", + "questName": "D_912367929", + "version": "1.1", + "authoredMarkerCount": 5, + "runtimeQuestionIds": [ + "SRVBLU_MENSINTRO_V1R0", + "SRVBLU_MENSINTRO2_V1R0", + "D_951357171!", + "D_593467240!", + "END" + ], + "responseControlsByType": { + "date": 1, + "radio": 2 + }, + "explicitTransitions": { + "targets": [ + "END" + ], + "byKind": { + "response": 1 + }, + "byResolution": { + "terminal": 1 + }, + "triggerTypes": { + "radio": 1 + }, + "triggerValues": [ + "104430631" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_951357171,104430631)", + "equals(D_951357171,353358909)" + ], + "sitesByScope": { + "inline": 2 + }, + "sitesByAttribute": { + "displayif": 2 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [ + "END" + ], + "counts": { + "authoredMarkerCount": 5, + "processorQuestionCount": 5, + "processedQuestionCount": 5, + "renderedFormCount": 5, + "controlCount": 14, + "responseControlCount": 3, + "explicitTransitionCount": 1, + "sequentialAdjacencyCount": 4, + "resolvedExplicitTransitionCount": 1, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 2, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 2 + } + }, + { + "schemaVersion": 1, + "module": "moduleMenstrual", + "locale": "es", + "language": "es", + "path": "prod/moduleMenstrualSpanish.txt", + "sha256": "6424161524cbfd2ba9884e0db0106f1dcb37132473125de2abeeae9c8ae6cc8f", + "questName": "D_912367929", + "version": "1.1", + "authoredMarkerCount": 5, + "runtimeQuestionIds": [ + "SRVBLU_MENSINTRO_V1R0", + "SRVBLU_MENSINTRO2_V1R0", + "D_951357171!", + "D_593467240!", + "END" + ], + "responseControlsByType": { + "date": 1, + "radio": 2 + }, + "explicitTransitions": { + "targets": [ + "END" + ], + "byKind": { + "response": 1 + }, + "byResolution": { + "terminal": 1 + }, + "triggerTypes": { + "radio": 1 + }, + "triggerValues": [ + "104430631" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_951357171,104430631)", + "equals(D_951357171,353358909)" + ], + "sitesByScope": { + "inline": 2 + }, + "sitesByAttribute": { + "displayif": 2 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [ + "END" + ], + "counts": { + "authoredMarkerCount": 5, + "processorQuestionCount": 5, + "processedQuestionCount": 5, + "renderedFormCount": 5, + "controlCount": 14, + "responseControlCount": 3, + "explicitTransitionCount": 1, + "sequentialAdjacencyCount": 4, + "resolvedExplicitTransitionCount": 1, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 2, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 2 + } + }, + { + "schemaVersion": 1, + "module": "moduleMouthwash", + "locale": "en", + "language": "en", + "path": "prod/moduleMouthwash.txt", + "sha256": "5d352f4bebe7c0a16cb835c24b44c93c7ce00af4a9b5c8a345ce3662036c70fd", + "questName": "D_390351864", + "version": "1.1", + "authoredMarkerCount": 34, + "runtimeQuestionIds": [ + "SRVMTW_MODULEINTRO_V1R0", + "D_667908442!", + "D_350251057?", + "D_877878167?", + "D_800703566?", + "D_294886836?", + "D_642044281?", + "D_479143504?", + "D_498984275?", + "D_205713835?", + "D_353467497?", + "D_429994023?", + "D_499977481?", + "D_406270109?", + "D_349659426?", + "D_766370065?", + "D_520416570?", + "D_921972241?", + "D_526973271?", + "D_460873842?", + "D_430060900?", + "D_800752981?", + "D_899251483_V2?", + "D_724589244?", + "D_957305523?", + "D_360678252?", + "D_542661394?", + "D_339570897?", + "D_983043203?", + "D_736028153?", + "D_792134396?", + "D_736393021?", + "D_318641324?", + "END" + ], + "responseControlsByType": { + "checkbox": 25, + "radio": 134 + }, + "explicitTransitions": { + "targets": [ + "D_350251057", + "END", + "D_498984275", + "D_205713835", + "D_353467497", + "D_429994023", + "D_499977481", + "D_406270109", + "D_349659426", + "D_766370065", + "D_520416570", + "D_921972241", + "D_526973271", + "D_460873842", + "D_430060900", + "D_800752981", + "D_724589244", + "D_957305523", + "D_360678252" + ], + "byKind": { + "no-response": 1, + "response": 21 + }, + "byResolution": { + "exact": 18, + "terminal": 4 + }, + "triggerTypes": { + "checkbox": 17, + "hidden": 1, + "radio": 4 + }, + "triggerValues": [ + "668770150", + "141992510", + "203919683", + "807884576", + "165596977", + "578402172", + "184513726", + "390351864", + "950773275", + "762727133", + "877842367", + "886771318", + "404389800", + "463302301", + "259744087", + "523660949", + "812107266", + "452438775", + "886864375", + "104430631", + "178420302" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_479143504,203919683)", + "equals(D_479143504,807884576)", + "equals(D_479143504,165596977)", + "equals(D_479143504,578402172)", + "equals(D_479143504,184513726)", + "equals(D_479143504,390351864)", + "equals(D_406270109,950773275)", + "equals(D_406270109,762727133)", + "equals(D_406270109,877842367)", + "equals(D_406270109,886771318)", + "equals(D_406270109,404389800)", + "equals(D_406270109,463302301)", + "equals(D_406270109,259744087)", + "equals(D_406270109,523660949)", + "equals(D_899251483_V2,812107266)", + "equals(D_899251483_V2,452438775)", + "equals(D_899251483_V2,886864375)", + "equals(D_667908442,141992510)", + "equals(D_667908442,668770150)" + ], + "sitesByScope": { + "inline": 2, + "question": 17 + }, + "sitesByAttribute": { + "displayif": 19 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [ + "END" + ], + "counts": { + "authoredMarkerCount": 34, + "processorQuestionCount": 34, + "processedQuestionCount": 34, + "renderedFormCount": 34, + "controlCount": 259, + "responseControlCount": 159, + "explicitTransitionCount": 22, + "sequentialAdjacencyCount": 33, + "resolvedExplicitTransitionCount": 22, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 19, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 19 + } + }, + { + "schemaVersion": 1, + "module": "moduleMouthwash", + "locale": "es", + "language": "es", + "path": "prod/moduleMouthwashSpanish.txt", + "sha256": "e7516c4836ad310bc8be26f7c96cb9e1f23ee0bcbc529677e34db332fd76637a", + "questName": "D_390351864", + "version": "1.1", + "authoredMarkerCount": 34, + "runtimeQuestionIds": [ + "SRVMTW_MODULEINTRO_V1R0", + "D_667908442!", + "D_350251057?", + "D_877878167?", + "D_800703566?", + "D_294886836?", + "D_642044281?", + "D_479143504?", + "D_498984275?", + "D_205713835?", + "D_353467497?", + "D_429994023?", + "D_499977481?", + "D_406270109?", + "D_349659426?", + "D_766370065?", + "D_520416570?", + "D_921972241?", + "D_526973271?", + "D_460873842?", + "D_430060900?", + "D_800752981?", + "D_899251483_V2?", + "D_724589244?", + "D_957305523?", + "D_360678252?", + "D_542661394?", + "D_339570897?", + "D_983043203?", + "D_736028153?", + "D_792134396?", + "D_736393021?", + "D_318641324?", + "END" + ], + "responseControlsByType": { + "checkbox": 25, + "radio": 134 + }, + "explicitTransitions": { + "targets": [ + "D_350251057", + "END", + "D_498984275", + "D_205713835", + "D_353467497", + "D_429994023", + "D_499977481", + "D_406270109", + "D_349659426", + "D_766370065", + "D_520416570", + "D_921972241", + "D_526973271", + "D_460873842", + "D_430060900", + "D_800752981", + "D_724589244", + "D_957305523", + "D_360678252" + ], + "byKind": { + "no-response": 1, + "response": 21 + }, + "byResolution": { + "exact": 18, + "terminal": 4 + }, + "triggerTypes": { + "checkbox": 17, + "hidden": 1, + "radio": 4 + }, + "triggerValues": [ + "668770150", + "141992510", + "203919683", + "807884576", + "165596977", + "578402172", + "184513726", + "390351864", + "950773275", + "762727133", + "877842367", + "886771318", + "404389800", + "463302301", + "259744087", + "523660949", + "812107266", + "452438775", + "886864375", + "104430631", + "178420302" + ], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [ + "equals(D_479143504,203919683)", + "equals(D_479143504,807884576)", + "equals(D_479143504,165596977)", + "equals(D_479143504,578402172)", + "equals(D_479143504,184513726)", + "equals(D_479143504,390351864)", + "equals(D_406270109,950773275)", + "equals(D_406270109,762727133)", + "equals(D_406270109,877842367)", + "equals(D_406270109,886771318)", + "equals(D_406270109,404389800)", + "equals(D_406270109,463302301)", + "equals(D_406270109,259744087)", + "equals(D_406270109,523660949)", + "equals(D_899251483_V2,812107266)", + "equals(D_899251483_V2,452438775)", + "equals(D_899251483_V2,886864375)", + "equals(D_667908442,141992510)", + "equals(D_667908442,668770150)" + ], + "sitesByScope": { + "inline": 2, + "question": 17 + }, + "sitesByAttribute": { + "displayif": 19 + } + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [ + "END" + ], + "counts": { + "authoredMarkerCount": 34, + "processorQuestionCount": 34, + "processedQuestionCount": 34, + "renderedFormCount": 34, + "controlCount": 259, + "responseControlCount": 159, + "explicitTransitionCount": 22, + "sequentialAdjacencyCount": 33, + "resolvedExplicitTransitionCount": 22, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 19, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 19 + } + }, + { + "schemaVersion": 1, + "module": "moduleQoL", + "locale": "en", + "language": "en", + "path": "prod/moduleQoL.txt", + "sha256": "6e1e8c3af357783996395be2a6b6907cf02f936c5cb8275717477f3e05c51b7e", + "questName": "D_601305072", + "version": "1.0", + "authoredMarkerCount": 11, + "runtimeQuestionIds": [ + "D_284353934?", + "D_404946076?", + "D_715048033?", + "D_907490539?", + "D_336566965?", + "D_420392309?", + "D_420560514?", + "D_261177801?", + "D_326712049?", + "D_230486322?", + "END" + ], + "responseControlsByType": { + "radio": 200 + }, + "explicitTransitions": { + "targets": [], + "byKind": {}, + "byResolution": {}, + "triggerTypes": {}, + "triggerValues": [], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [], + "sitesByScope": {}, + "sitesByAttribute": {} + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 11, + "processorQuestionCount": 11, + "processedQuestionCount": 11, + "renderedFormCount": 11, + "controlCount": 231, + "responseControlCount": 200, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 10, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 0 + } + }, + { + "schemaVersion": 1, + "module": "moduleQoL", + "locale": "es", + "language": "es", + "path": "prod/moduleQoLSpanish.txt", + "sha256": "c068aab47cb94768399a635e7e98a48078e29e36391db55987ce33701edbf4a1", + "questName": "D_601305072", + "version": "1.0", + "authoredMarkerCount": 11, + "runtimeQuestionIds": [ + "D_284353934?", + "D_404946076?", + "D_715048033?", + "D_907490539?", + "D_336566965?", + "D_420392309?", + "D_420560514?", + "D_261177801?", + "D_326712049?", + "D_230486322?", + "END" + ], + "responseControlsByType": { + "radio": 200 + }, + "explicitTransitions": { + "targets": [], + "byKind": {}, + "byResolution": {}, + "triggerTypes": {}, + "triggerValues": [], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [], + "sitesByScope": {}, + "sitesByAttribute": {} + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 11, + "processorQuestionCount": 11, + "processedQuestionCount": 11, + "renderedFormCount": 11, + "controlCount": 231, + "responseControlCount": 200, + "explicitTransitionCount": 0, + "sequentialAdjacencyCount": 10, + "resolvedExplicitTransitionCount": 0, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 0 + } + }, + { + "schemaVersion": 1, + "module": "ssnModule", + "locale": "en", + "language": "en", + "path": "prod/ssnModule.txt", + "sha256": "400e5fb271c1d434c6c397f370b32fced6d16ea2a2f589720ac220ba82bbeb1b", + "questName": "D_166676176", + "version": "1.0", + "authoredMarkerCount": 3, + "runtimeQuestionIds": [ + "SOCIALSECUR1?", + "SOCIALSECUR2?", + "END" + ], + "responseControlsByType": { + "text": 2 + }, + "explicitTransitions": { + "targets": [ + "SOCIALSECUR2", + "END" + ], + "byKind": { + "default": 1, + "no-response": 1 + }, + "byResolution": { + "exact": 1, + "terminal": 1 + }, + "triggerTypes": { + "hidden": 2 + }, + "triggerValues": [], + "conditionalExpressions": [] + }, + "conditions": { + "expressions": [], + "sitesByScope": {}, + "sitesByAttribute": {} + }, + "grids": [], + "loops": [], + "unresolvedTargets": [], + "asyncQuestionIds": [], + "counts": { + "authoredMarkerCount": 3, + "processorQuestionCount": 3, + "processedQuestionCount": 3, + "renderedFormCount": 3, + "controlCount": 11, + "responseControlCount": 2, + "explicitTransitionCount": 2, + "sequentialAdjacencyCount": 2, + "resolvedExplicitTransitionCount": 2, + "unresolvedExplicitTransitionCount": 0, + "conditionSiteCount": 0, + "gridQuestionCount": 0, + "gridRowCount": 0, + "loopStartCount": 0, + "loopDefinitionCount": 0, + "loopExpandedQuestionCount": 0, + "prefixOnlyTargetCount": 0, + "ambiguousPrefixTargetCount": 0, + "uniqueConditionExpressionCount": 0 + } + } + ] +} diff --git a/tests/corpus/structuralCatalog.spec.js b/tests/corpus/structuralCatalog.spec.js new file mode 100644 index 0000000..86ed73b --- /dev/null +++ b/tests/corpus/structuralCatalog.spec.js @@ -0,0 +1,323 @@ +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; + +import { describe, expect, it, vi } from 'vitest'; + +import { renderFreshQuest } from '../helpers/questRuntime.js'; +import { analyzeQuestionnaireText } from './scripts/lib/corpus.mjs'; +import { + STRUCTURAL_CATALOG_SCHEMA_VERSION, + buildStructuralCatalogRecord, +} from './scripts/lib/structuralCatalog.mjs'; + +const repositoryRoot = path.resolve(import.meta.dirname, '../..'); +const lock = JSON.parse(readFileSync(path.join(import.meta.dirname, 'lock.json'), 'utf8')); +const hostRegistry = JSON.parse(readFileSync(path.join(import.meta.dirname, 'hostPersonas.json'), 'utf8')); +const cacheDirectory = path.join(repositoryRoot, lock.cacheRoot, lock.commit); +const canonicalClock = new Date('2024-07-15T12:00:00.000Z'); +const primaryPersona = hostRegistry.personas.find(({ id }) => id === 'external-branch-primary'); + +const aggregateCountFields = [ + 'authoredMarkerCount', + 'processorQuestionCount', + 'processedQuestionCount', + 'renderedFormCount', + 'controlCount', + 'responseControlCount', + 'explicitTransitionCount', + 'sequentialAdjacencyCount', + 'resolvedExplicitTransitionCount', + 'unresolvedExplicitTransitionCount', + 'conditionSiteCount', + 'gridQuestionCount', + 'gridRowCount', + 'loopStartCount', + 'loopDefinitionCount', + 'loopExpandedQuestionCount', + 'prefixOnlyTargetCount', + 'ambiguousPrefixTargetCount', +]; + +function comparePaths(left, right) { + return left.path < right.path ? -1 : left.path > right.path ? 1 : 0; +} + +function asyncHooksFor(record) { + return Object.values(hostRegistry.asyncHooks) + .filter(({ module }) => module === record.module) + .toSorted((left, right) => left.markupKey.localeCompare(right.markupKey)); +} + +function asyncQuestionMap(hooks) { + return Object.fromEntries(hooks.map((hook) => [ + hook.markupKey, + { func: hook.function, args: hook.args }, + ])); +} + +function normalisedQuestionId(question, index) { + return question.questionIDExactSearch + ?? question.questionID?.replace(/[?!]$/, '') + ?? `__question_${index}`; +} + +function runtimeTargetResolver(processor, errorLog) { + return (target, { questionIndex }) => { + const originalIndex = processor.currentQuestionIndex; + const errorStart = errorLog.length; + + try { + processor.currentQuestionIndex = questionIndex; + const result = processor.findQuestion(target); + const resolverErrors = errorLog.splice(errorStart); + if (!result?.question || result.index < 0 || resolverErrors.length > 0) { + return { resolved: false, kind: resolverErrors.length ? 'oracle-error' : 'missing' }; + } + + const questions = processor.questions; + const exactMatches = questions + .map((question, index) => ({ id: normalisedQuestionId(question, index), index })) + .filter(({ id }) => id === target); + const prefixMatches = questions + .map((question, index) => ({ + id: question.questionID ?? normalisedQuestionId(question, index), + index, + })) + .filter(({ id }) => id.startsWith(target)); + const resolvedId = result.question.id || result.question.getAttribute('id'); + + let kind = 'prefix-only'; + if (target === 'END') kind = 'terminal'; + else if (target.startsWith('_CONTINUE')) kind = 'virtual-loop'; + else if (exactMatches.some(({ index }) => index === result.index)) kind = 'exact'; + else if (prefixMatches.length > 1) kind = 'ambiguous-prefix'; + else if (new RegExp(`^${target.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}_\\d+_\\d+[?!]?$`).test(resolvedId)) { + kind = 'generated-loop'; + } + + return { + resolved: true, + kind, + index: result.index, + questionId: resolvedId, + }; + } catch { + errorLog.splice(errorStart); + return { resolved: false, kind: 'oracle-exception' }; + } finally { + processor.currentQuestionIndex = originalIndex; + } + }; +} + +function addResolutionCounts(survey) { + const prefixOnlyTargetCount = survey.transitions + .filter(({ resolution }) => resolution.kind === 'prefix-only').length; + const ambiguousPrefixTargetCount = survey.transitions + .filter(({ resolution }) => resolution.kind === 'ambiguous-prefix').length; + const uniqueConditionExpressionCount = new Set(survey.conditionSites + .map(({ decodedCondition }) => decodedCondition) + .filter(Boolean)).size; + + return { + ...survey, + counts: { + ...survey.counts, + prefixOnlyTargetCount, + ambiguousPrefixTargetCount, + uniqueConditionExpressionCount, + }, + }; +} + +function responseControlTypes(questionRecords) { + const counts = {}; + for (const { controls } of questionRecords) { + for (const control of controls) { + const type = control.type ?? control.tag; + if (['button', 'hidden', 'reset', 'submit'].includes(type)) continue; + counts[type] = (counts[type] ?? 0) + control.count; + } + } + return Object.fromEntries(Object.entries(counts).toSorted(([left], [right]) => left.localeCompare(right))); +} + +function conditionSummary(conditionSites) { + return { + expressions: [...new Set(conditionSites.map(({ decodedCondition }) => decodedCondition))], + sitesByScope: countValues(conditionSites.map(({ scope }) => scope)), + sitesByAttribute: countValues(conditionSites.map(({ attribute }) => attribute)), + }; +} + +function transitionSummary(transitions) { + return { + targets: [...new Set(transitions.map(({ to }) => to))], + byKind: countValues(transitions.map(({ kind }) => kind)), + byResolution: countValues(transitions.map(({ resolution }) => resolution.kind)), + triggerTypes: countValues(transitions.map(({ control }) => control.type).filter(Boolean)), + triggerValues: [...new Set(transitions.map(({ control }) => control.value).filter(Boolean))], + conditionalExpressions: [...new Set(transitions + .map(({ control }) => control.decodedCondition) + .filter(Boolean))], + }; +} + +function countValues(values) { + const counts = {}; + for (const value of values) counts[value] = (counts[value] ?? 0) + 1; + return Object.fromEntries(Object.entries(counts).toSorted(([left], [right]) => left.localeCompare(right))); +} + +function compactSurvey(survey) { + return { + schemaVersion: survey.schemaVersion, + module: survey.module, + locale: survey.locale, + language: survey.language, + path: survey.path, + sha256: survey.sha256, + questName: survey.questName, + version: survey.version, + authoredMarkerCount: survey.authoredMarkerCount, + runtimeQuestionIds: survey.processedQuestionIds, + responseControlsByType: responseControlTypes(survey.questionRecords), + explicitTransitions: transitionSummary(survey.transitions), + conditions: conditionSummary(survey.conditionSites), + grids: survey.grids, + loops: survey.loops.definitions.map((definition) => ({ + loopIndex: definition.loopIndex, + loopMaxQuestionIds: definition.loopMaxQuestionIds, + iterationCount: definition.iterationCount, + iterationStartIndexes: definition.iterationStartIndexes, + boundaryIndex: definition.boundaryIndex, + })), + unresolvedTargets: survey.unresolvedTargets, + asyncQuestionIds: survey.asyncQuestionIds, + counts: survey.counts, + }; +} + +function sumCounts(surveys) { + return Object.fromEntries(aggregateCountFields.map((field) => [ + field, + surveys.reduce((total, survey) => total + (survey.counts[field] ?? 0), 0), + ])); +} + +function moduleSummaries(surveys) { + return [...Map.groupBy(surveys, ({ module }) => module)] + .map(([module, moduleSurveys]) => ({ + module, + counts: sumCounts(moduleSurveys), + surveys: moduleSurveys.map(({ locale, path: surveyPath, counts }) => ({ + locale, + path: surveyPath, + authoredMarkerCount: counts.authoredMarkerCount, + processorQuestionCount: counts.processorQuestionCount, + gridQuestionCount: counts.gridQuestionCount, + loopDefinitionCount: counts.loopDefinitionCount, + explicitTransitionCount: counts.explicitTransitionCount, + conditionSiteCount: counts.conditionSiteCount, + unresolvedExplicitTransitionCount: counts.unresolvedExplicitTransitionCount, + })), + })) + .toSorted(({ module: left }, { module: right }) => left.localeCompare(right)); +} + +async function buildSurveyCatalog(record) { + const sourcePath = path.join(cacheDirectory, record.path); + expect( + existsSync(sourcePath), + `Locked corpus cache is absent. Run npm run corpus:fetch for ${lock.commit}.`, + ).toBe(true); + + const markdown = readFileSync(sourcePath, 'utf8'); + const sourceAnalysis = analyzeQuestionnaireText(markdown); + const hooks = asyncHooksFor(record); + const previousResults = { + ...primaryPersona.previousResults, + ...primaryPersona.userProfile, + }; + const rendered = await renderFreshQuest({ + markdown, + previousResults, + params: { + activate: false, + asyncQuestionsMap: asyncQuestionMap(hooks), + isRenderer: true, + lang: record.locale, + questVersion: record.version, + showProgressBarInQuest: false, + }, + }); + + expect(rendered.rendered, `${record.path}: transform.render failed in full-list mode`).toBe(true); + expect(rendered.errors, `${record.path}: Quest logged a full-list rendering error`).toEqual([]); + expect(sourceAnalysis.questName).toBe(record.questName); + expect(sourceAnalysis.version).toBe(record.version); + expect(sourceAnalysis.questionIds).toHaveLength(record.sourceQuestionCount); + + const processor = rendered.state.getQuestionProcessor(); + expect(processor.processedQuestions.size, `${record.path}: not every runtime entry was processed`) + .toBe(processor.questions.length); + expect(rendered.root.querySelectorAll('form.question'), `${record.path}: not every runtime entry was appended`) + .toHaveLength(processor.questions.length); + + const survey = buildStructuralCatalogRecord({ + record, + processor, + renderedRoot: rendered.root, + asyncQuestionIds: hooks.map(({ markupKey }) => markupKey), + resolveTarget: runtimeTargetResolver(processor, rendered.errors), + }); + + return compactSurvey(addResolutionCounts({ + ...survey, + sha256: record.sha256, + asyncQuestionIds: hooks.map(({ questionId }) => questionId), + })); +} + +describe('locked production structural catalog', () => { + it('matches every parser-produced form and explicit target', async () => { + expect(primaryPersona, 'The structural catalog requires the primary locked host persona.').toBeTruthy(); + vi.spyOn(console, 'log').mockImplementation(() => {}); + vi.useFakeTimers({ toFake: ['Date'] }); + vi.setSystemTime(canonicalClock); + + const surveys = []; + for (const record of lock.files.toSorted(comparePaths)) { + surveys.push(await buildSurveyCatalog(record)); + } + + const catalog = { + schemaVersion: STRUCTURAL_CATALOG_SCHEMA_VERSION, + corpus: { + repository: lock.repository, + commit: lock.commit, + environment: lock.environment, + fileCount: lock.files.length, + moduleCount: lock.expectedModuleCount, + }, + oracle: { + boundary: 'transform.render with isRenderer=true and activate=false', + hostPersona: primaryPersona.id, + fixedDate: canonicalClock.toISOString(), + sequentialAdjacency: 'Adjacent runtimeQuestionIds; path feasibility is intentionally not inferred.', + }, + counts: sumCounts(surveys), + modules: moduleSummaries(surveys), + surveys, + }; + + expect(catalog.surveys).toHaveLength(29); + expect(catalog.counts.processorQuestionCount).toBe(catalog.counts.processedQuestionCount); + expect(catalog.counts.processorQuestionCount).toBe(catalog.counts.renderedFormCount); + expect(catalog.counts.unresolvedExplicitTransitionCount).toBe(0); + expect(catalog.counts.prefixOnlyTargetCount).toBe(0); + expect(catalog.counts.ambiguousPrefixTargetCount).toBe(0); + await expect(`${JSON.stringify(catalog, null, 2)}\n`) + .toMatchFileSnapshot('./structuralCatalog.json'); + }, 180_000); +}); diff --git a/tests/e2e/accessibility.spec.js b/tests/e2e/accessibility.spec.js new file mode 100644 index 0000000..af8a136 --- /dev/null +++ b/tests/e2e/accessibility.spec.js @@ -0,0 +1,349 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + goBack, + goNext, + openParticipant, + selectLabeledResponse, + waitInHarness, +} from './support/harness.js'; +import { analyzeQuestAxe, unwaivedAxeFindings } from './support/axe.js'; +import { axeDefects } from '../knownDefects/registry.js'; + +const ACCESSIBILITY_PROJECTS = new Set([ + 'chromium-desktop', + 'firefox-desktop', + 'webkit-desktop', + 'chromium-windows-ua', +]); + +const AXE_PROJECTS = new Set([ + ...ACCESSIBILITY_PROJECTS, + 'chromium-phone', + 'chromium-tablet', +]); + +const CURRENT_AXE_BASELINE = [ + axeDefects.progressbarName, + axeDefects.progressbarValue, +]; + +const GRID_AXE_BASELINE = [ + ...CURRENT_AXE_BASELINE, + axeDefects.emptyGridHeader, +]; + +const VALIDATION_AXE_BASELINE = [ + ...CURRENT_AXE_BASELINE, + axeDefects.validationContrast, + axeDefects.validationLabel, +]; + +async function expectNoUnwaivedAxeViolations(page, accepted = CURRENT_AXE_BASELINE) { + const findings = await analyzeQuestAxe(page); + expect(unwaivedAxeFindings(findings, accepted)).toEqual([]); +} + +async function expectModalFocusCycle(page, modal, firstFocusable, lastFocusable) { + await lastFocusable.focus(); + await expect(lastFocusable).toBeFocused(); + await page.keyboard.press('Tab'); + expect(await modal.evaluate((element) => element.contains(document.activeElement))).toBe(true); + await expect(firstFocusable).toBeFocused(); + + await page.keyboard.press('Shift+Tab'); + expect(await modal.evaluate((element) => element.contains(document.activeElement))).toBe(true); + await expect(lastFocusable).toBeFocused(); +} + +async function traverseHostBoundary(page, key, terminalId, maximumPresses = 20) { + const path = []; + for (let press = 0; press < maximumPresses; press += 1) { + await page.keyboard.press(key); + const focused = await page.evaluate(() => { + const element = document.activeElement; + return { + id: element?.id || null, + inQuest: Boolean(element?.closest?.('#questionnaireRoot')), + responseTabStop: element?.classList?.contains('response') ?? false, + screenReaderFocus: Boolean(element?.classList?.contains('screen-reader-focus')), + clickType: element?.dataset?.clickType || null, + }; + }); + path.push(focused); + if (focused.id === terminalId) return path; + } + throw new Error(`Focus did not reach #${terminalId} after ${maximumPresses} ${key} presses: ${JSON.stringify(path)}`); +} + +test.describe('participant accessibility contract @canonical @windows-a11y', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !ACCESSIBILITY_PROJECTS.has(testInfo.project.name), + 'The semantic contract runs in each desktop engine and the Windows user-agent branch.', + ); + }); + + test('groups the prompt in a legend and exposes named survey actions', async ({ page }) => { + await openParticipant(page); + + const question = activeQuestion(page, 'CHOICE'); + await expect(question.locator('fieldset')).toHaveCount(1); + await expect(question.locator('legend')).toHaveText('Which color do you prefer?'); + await expect(question.getByRole('button', { name: 'Next question' })).toBeVisible(); + await expect(question.getByRole('button', { name: 'Reset this answer' })).toBeVisible(); + + const liveRegion = page.locator('#ariaLiveSelectionAnnouncer'); + await expect(liveRegion).toHaveAttribute('aria-live', 'polite'); + await selectLabeledResponse(page, 'Blue'); + await expect(liveRegion).toHaveText('Blue Selected.'); + + const accessibilitySnapshot = await question.ariaSnapshot(); + expect(accessibilitySnapshot).toContain('Which color do you prefer?'); + expect(accessibilitySnapshot).toContain('Next question'); + await expectHealthyHarness(page); + }); + + test('keeps the deliberate action-button tab order on a later question', async ({ page }, testInfo) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + + const question = activeQuestion(page, 'DETAIL'); + const domOrder = await question.locator('button').evaluateAll((buttons) => ( + buttons.map((button) => button.dataset.clickType) + )); + expect(domOrder).toEqual(['next', 'reset', 'previous']); + + // Playwright WebKit follows Safari's macOS default where Tab may omit + // buttons unless Full Keyboard Access is enabled at the OS level. That + // setting is covered in the manual matrix. Test the DOM contract here. + if (testInfo.project.name === 'webkit-desktop') { + await expectHealthyHarness(page); + return; + } + + const input = question.locator('#detail'); + await input.focus(); + await page.keyboard.press('Tab'); + await expect(question.getByRole('button', { name: 'Next question' })).toBeFocused(); + await page.keyboard.press('Tab'); + await expect(question.getByRole('button', { name: 'Reset this answer' })).toBeFocused(); + await page.keyboard.press('Tab'); + await expect(question.getByRole('button', { name: 'Back to the previous question' })).toBeFocused(); + await page.keyboard.press('Shift+Tab'); + await expect(question.getByRole('button', { name: 'Reset this answer' })).toBeFocused(); + await page.keyboard.press('Shift+Tab'); + await expect(question.getByRole('button', { name: 'Next question' })).toBeFocused(); + await page.keyboard.press('Shift+Tab'); + await expect(input).toBeFocused(); + await expectHealthyHarness(page); + }); + + test('moves focus into the new question after Next and Back', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + + await expect(activeQuestion(page, 'DETAIL').locator('.screen-reader-focus')).toBeFocused(); + await goBack(page); + await expect(activeQuestion(page, 'PATH').locator('.screen-reader-focus')).toBeFocused(); + await expect(activeQuestion(page, 'PATH').locator('#PATH_1')).toBeChecked(); + await expectHealthyHarness(page); + }); + + test('keeps a generated scalar label associated with its input', async ({ page }) => { + await openParticipant(page, { + markdown: `{"name":"TEST_SCALAR_LABEL"} + +[SCALAR?] At what time should we call? +|time|id=scalar_time| + +[END,end] Complete.`, + }); + + const question = activeQuestion(page, 'SCALAR'); + const label = question.locator('label[for="scalar_time"]'); + const input = question.locator('#scalar_time'); + await expect(label).toHaveText('Enter Time'); + await expect(input).toHaveAccessibleName('Enter Time'); + expect(await input.evaluate((element) => ( + [...element.labels].map((candidate) => candidate.getAttribute('for')) + ))).toEqual(['scalar_time']); + await expectHealthyHarness(page); + }); + + test('crosses both host and Quest focus boundaries with Tab and reverse Shift+Tab', async ({ page }, testInfo) => { + await openParticipant(page); + await waitInHarness(page, 550); + + if (testInfo.project.name === 'webkit-desktop') { + // Playwright WebKit follows Safari's macOS default that omits buttons + // from Tab navigation unless Full Keyboard Access is enabled. Assert the + // complete DOM boundary here. The native traversal is in the manual + // Safari + VoiceOver protocol and is not simulated with programmatic focus. + expect(await page.evaluate(() => { + const before = document.querySelector('#host-before'); + const quest = document.querySelector('#questionnaireRoot'); + const after = document.querySelector('#host-after'); + const beforePrecedesQuest = Boolean( + before.compareDocumentPosition(quest) & Node.DOCUMENT_POSITION_FOLLOWING, + ); + const questPrecedesAfter = Boolean( + quest.compareDocumentPosition(after) & Node.DOCUMENT_POSITION_FOLLOWING, + ); + return beforePrecedesQuest && questPrecedesAfter; + })).toBe(true); + await expectHealthyHarness(page); + return; + } + + await page.locator('#host-before').focus(); + const forward = await traverseHostBoundary(page, 'Tab', 'host-after'); + expect(forward.slice(0, -1).every((entry) => entry.inQuest)).toBe(true); + expect(forward.some((entry) => entry.screenReaderFocus)).toBe(true); + expect(forward.some((entry) => entry.clickType === 'next')).toBe(true); + expect(forward.some((entry) => entry.clickType === 'reset')).toBe(true); + if (testInfo.project.name === 'chromium-windows-ua') { + expect(forward.some((entry) => entry.responseTabStop)).toBe(true); + } + + await page.locator('#host-after').focus(); + const reverse = await traverseHostBoundary(page, 'Shift+Tab', 'host-before'); + expect(reverse.slice(0, -1).every((entry) => entry.inQuest)).toBe(true); + expect(reverse.some((entry) => entry.screenReaderFocus)).toBe(true); + expect(reverse.some((entry) => entry.clickType === 'next')).toBe(true); + expect(reverse.some((entry) => entry.clickType === 'reset')).toBe(true); + await expectHealthyHarness(page); + }); + + test('names the soft-response dialog and restores question focus when it closes', async ({ page }, testInfo) => { + await openParticipant(page); + // Let the initial question's delayed focus handoff complete before this + // test isolates the Bootstrap modal focus trap. The competing-timer case + // is characterized separately in the known-defect lane. + await expect(activeQuestion(page, 'CHOICE').locator('.screen-reader-focus')).toBeFocused(); + await goNext(page); + + const modal = page.locator('#softModal'); + const dialog = page.getByRole('dialog', { name: 'Response requested' }); + await expect(modal).toHaveClass(/show/); + await expect(page.locator('#softModalTitle')).toBeFocused(); + await waitInHarness(page, 400); + if (testInfo.project.name === 'webkit-desktop') { + // Safari's button-tabbing preference also affects modal controls. Keep + // their stable DOM contract automated and exercise the native cycle in + // the Full Keyboard Access manual matrix. + expect(await modal.locator('button, [tabindex="0"]').evaluateAll((elements) => ( + elements.map((element) => element.id || element.getAttribute('aria-label')) + ))).toEqual(['Close', 'modalBodyText', 'modalContinueButton', 'modalCloseButton']); + } else { + await expectModalFocusCycle( + page, + modal, + dialog.getByRole('button', { name: 'Close' }), + dialog.getByRole('button', { name: 'Answer the Question' }), + ); + } + await dialog.getByRole('button', { name: 'Close' }).click(); + await waitInHarness(page, 700); + + await expect(modal).not.toHaveClass(/show/); + await expect(activeQuestion(page, 'CHOICE').locator('.screen-reader-focus')).toBeFocused(); + await expectHealthyHarness(page); + }); + + test('names the submit dialog, focuses its title, and closes it with Escape', async ({ page }, testInfo) => { + await openParticipant(page, { fixture: 'validation.txt' }); + await activeQuestion(page, 'BOUNDED').locator('#bounded').fill('2'); + await goNext(page); + // Let Quest's scheduled question-focus handoff finish before isolating the + // Bootstrap modal focus trap. Otherwise, the independent timers can race + // under a parallel browser run. + await waitInHarness(page, 550); + + const trigger = activeQuestion(page, 'END').getByRole('button', { name: 'Submit your survey' }); + await trigger.click(); + const dialog = page.getByRole('dialog', { name: 'Submit Answers' }); + await expect(dialog).toBeVisible(); + await expect(page.locator('#submitModalTitle')).toBeFocused(); + await waitInHarness(page, 400); + const modal = page.locator('#submitModal'); + if (testInfo.project.name === 'webkit-desktop') { + expect(await modal.locator('button, [tabindex="0"]').evaluateAll((elements) => ( + elements.map((element) => element.id || element.getAttribute('aria-label')) + ))).toEqual(['Close', 'submitModalBodyText', 'submitModalButton', 'cancelModalButton']); + } else { + await expectModalFocusCycle( + page, + modal, + dialog.getByRole('button', { name: 'Close' }), + dialog.getByRole('button', { name: 'Cancel' }), + ); + } + await page.keyboard.press('Escape'); + await waitInHarness(page, 700); + + await expect(page.locator('#submitModal')).not.toHaveClass(/show/); + await expectHealthyHarness(page); + }); +}); + +test.describe('automated accessibility scan @axe', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !AXE_PROJECTS.has(testInfo.project.name), + 'The Axe baseline runs in every desktop, responsive, and Windows-user-agent project.', + ); + }); + + test('has no unwaived findings in a normal participant question', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + await expectNoUnwaivedAxeViolations(page); + await expectHealthyHarness(page); + }); + + test('has no unwaived findings in an active response grid', async ({ page }) => { + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await goNext(page); + await expect(activeQuestion(page, 'GRID_RATE')).toBeVisible(); + await expectNoUnwaivedAxeViolations(page, GRID_AXE_BASELINE); + await expectHealthyHarness(page); + }); + + test('has no unwaived findings while range validation is visible', async ({ page }) => { + await openParticipant(page, { fixture: 'validation.txt' }); + await activeQuestion(page, 'BOUNDED').locator('#bounded').fill('9'); + await goNext(page); + await expect(activeQuestion(page).locator('.validation-container')).toBeVisible(); + await expectNoUnwaivedAxeViolations(page, VALIDATION_AXE_BASELINE); + await expectHealthyHarness(page); + }); + + test('has no unwaived findings while the response dialog is open', async ({ page }) => { + await openParticipant(page); + await goNext(page); + await expect(page.locator('#softModal')).toHaveClass(/show/); + // Sample after Bootstrap's transition settles so WebKit does not alternate + // between transient focus styles and the stable modal state. + await waitInHarness(page, 400); + await expectNoUnwaivedAxeViolations(page); + await expectHealthyHarness(page); + }); + + test('has no unwaived findings while the submit dialog is open', async ({ page }) => { + await openParticipant(page, { fixture: 'validation.txt' }); + await activeQuestion(page, 'BOUNDED').locator('#bounded').fill('2'); + await goNext(page); + await activeQuestion(page, 'END').getByRole('button', { name: 'Submit your survey' }).click(); + await expect(page.getByRole('dialog', { name: 'Submit Answers' })).toBeVisible(); + // Let Bootstrap finish transferring focus off the trigger. Axe/WebKit can + // otherwise sample the transient focused-button color during the same task. + await waitInHarness(page, 400); + await expectNoUnwaivedAxeViolations(page); + await expectHealthyHarness(page); + }); +}); diff --git a/tests/e2e/accessibilityLifecycleKnownDefects.spec.js b/tests/e2e/accessibilityLifecycleKnownDefects.spec.js new file mode 100644 index 0000000..8bea12c --- /dev/null +++ b/tests/e2e/accessibilityLifecycleKnownDefects.spec.js @@ -0,0 +1,147 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + harnessSnapshot, + openParticipant, + waitInHarness, +} from './support/harness.js'; +import { analyzeQuestAxe } from './support/axe.js'; +import { accessibilityDefects, axeDefects, runtimeDefects } from '../knownDefects/registry.js'; + +const NATIVE_KEYBOARD_PROJECTS = new Set([ + 'chromium-desktop', + 'firefox-desktop', + 'webkit-desktop', + 'chromium-windows-ua', +]); + +// Module 1 contains production |___| textareas. Keep this minimal two-line +// reproduction independent of a long survey path so it isolates #1587's +// delegated ArrowUp/ArrowDown behavior. +const TEXTAREA_KEYBOARD_MARKDOWN = `{"name":"TEST_TEXTAREA_KEYBOARD"} + +[NOTES?] Please enter two short notes. +|___|notes| + +[END,end] Complete.`; + +async function openPlainTextarea(page) { + await openParticipant(page, { markdown: TEXTAREA_KEYBOARD_MARKDOWN }); + const textarea = activeQuestion(page, 'NOTES').locator('#notes'); + await textarea.fill('first\nsecond'); + return textarea; +} + +async function selectionState(textarea) { + return textarea.evaluate((element) => ({ + focused: document.activeElement === element, + start: element.selectionStart, + end: element.selectionEnd, + })); +} + +test.describe('accessibility event lifecycle regressions @known-defect', () => { + test('#1587 leaves ArrowDown to a plain native textarea', async ({ page }, testInfo) => { + test.skip(!NATIVE_KEYBOARD_PROJECTS.has(testInfo.project.name), 'The native textarea contract runs in each desktop engine and the Windows user-agent branch.'); + + const textarea = await openPlainTextarea(page); + await textarea.focus(); + await textarea.evaluate((element) => element.setSelectionRange(0, 0)); + await expect(textarea).toBeFocused(); + await page.keyboard.press('ArrowDown'); + await waitInHarness(page, 25); + + const state = await selectionState(textarea); + test.fail(true, `${accessibilityDefects[1587].issue}: ArrowDown must retain native multiline caret behavior instead of moving Quest focus.`); + expect(state.focused).toBe(true); + expect(state.start).toBeGreaterThan(0); + expect(state.end).toBe(state.start); + }); + + test('#1587 leaves ArrowUp to a plain native textarea', async ({ page }, testInfo) => { + test.skip(!NATIVE_KEYBOARD_PROJECTS.has(testInfo.project.name), 'The native textarea contract runs in each desktop engine and the Windows user-agent branch.'); + + const textarea = await openPlainTextarea(page); + await textarea.focus(); + await textarea.evaluate((element) => element.setSelectionRange(6, 6)); + await expect(textarea).toBeFocused(); + await page.keyboard.press('ArrowUp'); + await waitInHarness(page, 25); + + const state = await selectionState(textarea); + test.fail(true, `${accessibilityDefects[1587].issue}: ArrowUp must retain native multiline caret behavior instead of moving Quest focus.`); + expect(state.focused).toBe(true); + expect(state.start).toBe(0); + expect(state.end).toBe(0); + }); + + test('clears a delayed list-selection announcement when advancing immediately', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The asynchronous announcement race is characterized once in Chromium.'); + const defect = runtimeDefects.staleSelectionAnnouncement; + + await openParticipant(page); + await activeQuestion(page, 'CHOICE').locator('label', { hasText: 'Blue' }).click(); + await activeQuestion(page, 'CHOICE').getByRole('button', { name: 'Next question' }).click(); + await expect(activeQuestion(page, 'CHECKS')).toBeVisible(); + await waitInHarness(page, 150); + + test.fail(true, `${defect.localDefectId}: ${defect.reason}`); + await expect(page.locator('#ariaLiveSelectionAnnouncer')).toHaveText('', { timeout: 1_000 }); + }); + + test('clears a delayed list-selection announcement when returning immediately', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The asynchronous announcement race is characterized once in Chromium.'); + const defect = runtimeDefects.staleSelectionAnnouncement; + + await openParticipant(page); + await activeQuestion(page, 'CHOICE').locator('label', { hasText: 'Blue' }).click(); + await waitInHarness(page, 150); + await activeQuestion(page, 'CHOICE').getByRole('button', { name: 'Next question' }).click(); + await expect(activeQuestion(page, 'CHECKS')).toBeVisible(); + await activeQuestion(page, 'CHECKS').locator('label', { hasText: 'Email' }).click(); + await activeQuestion(page, 'CHECKS').getByRole('button', { name: 'Back to the previous question' }).click(); + await expect(activeQuestion(page, 'CHOICE')).toBeVisible(); + await waitInHarness(page, 150); + + test.fail(true, `${defect.localDefectId}: ${defect.reason}`); + await expect(page.locator('#ariaLiveSelectionAnnouncer')).toHaveText('', { timeout: 1_000 }); + }); + + test('does not move the Windows grid focus helper back into an inactive grid after immediate Next', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-windows-ua', 'The shared grid focus helper is only used through Quest’s Windows accessibility branch.'); + const defect = runtimeDefects.gridDeferredFocusAfterNavigation; + + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await activeQuestion(page, 'GRID_LEAD').getByRole('button', { name: 'Next question' }).click(); + await expect(activeQuestion(page, 'GRID_RATE')).toBeVisible(); + + await page.evaluate(() => { + document.querySelector('#GRID_WALK_1').click(); + document.querySelector('#GRID_CYCLE_2').click(); + document.querySelector('#GRID_RATE button.next').click(); + }); + await expect(activeQuestion(page, 'END')).toBeVisible(); + await waitInHarness(page, 200); + const inactiveHelperCount = await page.locator('#GRID_RATE #srFocusHelper').count(); + const errors = (await harnessSnapshot(page)).logs.errors; + + test.fail(true, `${defect.localDefectId}: ${defect.reason}`); + expect(inactiveHelperCount).toBe(0); + expect(errors).toEqual([]); + }); + + test('production-shaped image markup supplies a text alternative and has no image-alt violation', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The image-alt defect is characterized once in Chromium.'); + const defect = axeDefects.imageAlt; + + await openParticipant(page, { fixture: 'imageAlt.txt' }); + const image = activeQuestion(page, 'PLAIN').locator('img'); + await expect(image).toHaveAttribute('src', /FemaleBaldness1\.png$/); + const alt = await image.getAttribute('alt'); + const imageAltFindings = (await analyzeQuestAxe(page)).filter((finding) => finding.id === defect.ruleId); + + test.fail(true, `${defect.localDefectId}: ${defect.reason}`); + expect(alt).toMatch(/\S/); + expect(imageAltFindings).toEqual([]); + }); +}); diff --git a/tests/e2e/assets/FemaleBaldness1.png b/tests/e2e/assets/FemaleBaldness1.png new file mode 100644 index 0000000000000000000000000000000000000000..641f0c65e99ba727edc37e74687285425f4abf23 GIT binary patch literal 39347 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 KRJo*S;Qt4X!WDf0 literal 0 HcmV?d00001 diff --git a/tests/e2e/assets/fonts.lock.json b/tests/e2e/assets/fonts.lock.json new file mode 100644 index 0000000..95aeb82 --- /dev/null +++ b/tests/e2e/assets/fonts.lock.json @@ -0,0 +1,21 @@ +{ + "schemaVersion": 1, + "assets": [ + { + "family": "Libre Baskerville", + "style": "normal", + "weight": 400, + "version": "v24", + "stylesheetUrl": "https://fonts.googleapis.com/css2?family=Libre+Baskerville&display=swap", + "url": "https://fonts.gstatic.com/s/librebaskerville/v24/kmKUZrc3Hgbbcjq75U4uslyuy4kn0olVQ-LglH6T17uj8Q4SCQ.ttf", + "path": "fonts/libre-baskerville-latin-400-v24.ttf", + "mimeType": "font/ttf", + "sha256": "f5bc4341f15de5e877d8d95b6b14b33e9a3da1f8fef4ed0700ed407f096cffb6", + "bytes": 106728, + "license": "SIL Open Font License 1.1", + "licensePath": "fonts/OFL-Libre-Baskerville.txt", + "licenseSha256": "516bf7fbfdbd0f0e4f50ade6a9127ad83ac7a54370bad6cf70794554569e9c4e", + "upstream": "https://github.com/google/fonts/tree/main/ofl/librebaskerville" + } + ] +} diff --git a/tests/e2e/assets/fonts/OFL-Libre-Baskerville.txt b/tests/e2e/assets/fonts/OFL-Libre-Baskerville.txt new file mode 100644 index 0000000..5804419 --- /dev/null +++ b/tests/e2e/assets/fonts/OFL-Libre-Baskerville.txt @@ -0,0 +1,93 @@ +Copyright 2012 The Libre Baskerville Project Authors (https://github.com/impallari/Libre-Baskerville) with Reserved Font Name Libre Baskerville. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/tests/e2e/assets/fonts/libre-baskerville-latin-400-v24.ttf b/tests/e2e/assets/fonts/libre-baskerville-latin-400-v24.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c41e10f8c9831e017c355fb6c20332eafcf6f0e2 GIT binary patch literal 106728 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 literal 0 HcmV?d00001 diff --git a/tests/e2e/authoring.spec.js b/tests/e2e/authoring.spec.js new file mode 100644 index 0000000..819df0e --- /dev/null +++ b/tests/e2e/authoring.spec.js @@ -0,0 +1,566 @@ +import { + test, + expect, + expectAndClearConsoleErrors, + expectAndClearConsoleWarnings, +} from './support/test.js'; +import { readCanonicalFixture } from './support/harness.js'; +import { + AUTHORING_BOOTSTRAP_CSS_URL, + AUTHORING_BOOTSTRAP_JS_URL, + DEMO_MODULE_URL, + GITHUB_BLOB_MODULE_URL, + GITHUB_RAW_MODULE_URL, + GITHUB_WEB_RAW_MODULE_URL, + HTTP_ERROR_MODULE_URL, + LIBRE_BASKERVILLE_FONT_URL, + LIBRE_BASKERVILLE_STYLESHEET_URL, + REJECTED_MODULE_URL, + TEST_MODULE_URL, + closeAuthoringSettings, + installAuthoringRoutes, + openAuthoringSettings, + renderAuthoringMarkdown, + waitForAuthoringReady, +} from './support/authoring.js'; + +const DESKTOP_ENGINES = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); +const CONDITIONAL_MARKDOWN = ` + {"name":"PREVIOUS_RESULTS_AUTHORING"} + [START] Begin the conditional test. + [HIDDEN,displayif=equals(EXTERNAL_FLAG,0)] Prior data did not match. + [VISIBLE,displayif=equals(EXTERNAL_FLAG,1)] Prior data matched. + [END] Done. +`; + +async function readQuestParamsIndexedDb(page) { + return page.evaluate(async () => { + const supportsDatabaseEnumeration = typeof indexedDB.databases === 'function'; + const databases = supportsDatabaseEnumeration ? await indexedDB.databases() : []; + const questDatabase = databases.find((database) => database.name === 'questParams'); + if (!questDatabase) { + return { + supportsDatabaseEnumeration, + databases, + objectStores: [], + records: {}, + }; + } + + const database = await new Promise((resolve, reject) => { + const request = indexedDB.open('questParams'); + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }); + const objectStores = [...database.objectStoreNames]; + const keys = ['logic', 'styling', 'previousResults']; + const transaction = database.transaction('params', 'readonly'); + const store = transaction.objectStore('params'); + const values = await Promise.all(keys.map((key) => new Promise((resolve, reject) => { + const request = store.get(key); + request.onerror = () => reject(request.error); + request.onsuccess = () => resolve(request.result); + }))); + database.close(); + + return { + supportsDatabaseEnumeration, + databases, + objectStores, + records: Object.fromEntries(keys.map((key, index) => [key, values[index]])), + }; + }); +} + +test.describe('checked-in authoring application @authoring', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !DESKTOP_ENGINES.has(testInfo.project.name), + 'The authoring suite runs in each desktop browser engine.', + ); + }); + + test('renders a complete module and switches to participant-style active logic @cross-browser-authoring', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + await renderAuthoringMarkdown(page, readCanonicalFixture('runtimeControls.txt')); + + await expect(page.locator('#rendering form.question')).toHaveCount(8); + await expect(page.locator('#rendering form.question:visible')).toHaveCount(8); + await expect(page.locator('#pagestyle')).toHaveAttribute('href', 'Default.css'); + await expect(page.locator('#pagelogic')).toHaveAttribute('href', 'Default.css'); + + await openAuthoringSettings(page); + await page.getByRole('switch', { name: 'Activate Logic' }).check(); + await expect(page.locator('#pagelogic')).toHaveAttribute('href', 'ActiveLogic.css'); + await expect(page.locator('#rendering form.question')).toHaveCount(1); + await expect(page.locator('#rendering form.question.active')).toHaveCount(1); + + await page.getByRole('switch', { name: 'Use Styling' }).check(); + await expect(page.locator('#pagestyle')).toHaveAttribute('href', 'Style1.css'); + await expect(page.locator('#rendering form.question.active')).toHaveCount(1); + }); + + test('loads previous results before rendering and applies them to authored conditions', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + await openAuthoringSettings(page); + await page.getByRole('textbox', { name: 'json input' }).fill('{"EXTERNAL_FLAG":"1"}'); + await page.getByRole('button', { name: 'Add JSON to Memory' }).click(); + await expect(page.locator('#loadDisplay')).toHaveText('Added JSON successfully.'); + await page.getByRole('switch', { name: 'Activate Logic' }).check(); + await closeAuthoringSettings(page); + + await renderAuthoringMarkdown(page, CONDITIONAL_MARKDOWN); + await expect(page.locator('#rendering #START.active')).toBeVisible(); + await page.locator('#rendering #START button.next').click(); + await expect(page.locator('#rendering #VISIBLE.active')).toBeVisible(); + await expect(page.locator('#rendering #HIDDEN')).toHaveCount(0); + }); + + test('loads a module through the Settings URL control and preserves it as a hash', async ({ page, diagnostics }) => { + const markdown = readCanonicalFixture('navigationState.txt'); + await installAuthoringRoutes(page, diagnostics, { + modules: { [TEST_MODULE_URL]: markdown }, + }); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + await openAuthoringSettings(page); + + await page.getByRole('textbox', { name: 'url', exact: true }).fill(TEST_MODULE_URL); + await Promise.all([ + page.waitForNavigation({ waitUntil: 'load' }), + page.getByRole('button', { name: 'Load URL' }).click(), + ]); + await waitForAuthoringReady(page); + + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + await expect(page.locator('#rendering form.question')).toHaveCount(4); + expect(diagnostics.fulfilledExternalRequests).toContain(TEST_MODULE_URL); + expect(decodeURIComponent(new URL(page.url()).hash)).toBe(`#${TEST_MODULE_URL}`); + }); + + test('honors query run/style/url parameters without exposing the authoring chrome', async ({ page, diagnostics }) => { + const markdown = readCanonicalFixture('navigationState.txt'); + await installAuthoringRoutes(page, diagnostics, { + modules: { [TEST_MODULE_URL]: markdown }, + }); + const query = new URLSearchParams({ + url: TEST_MODULE_URL, + run: '', + style: 'Style1.css', + }); + + await page.goto(`/index.html?${query}`); + await waitForAuthoringReady(page); + + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + await expect(page.locator('#logic')).toBeChecked(); + await expect(page.locator('#questNavbar')).toBeHidden(); + await expect(page.locator('#markup')).toBeHidden(); + await expect(page.locator('#renderText')).toBeHidden(); + await expect(page.locator('#rendering').locator('form.question.active')).toHaveCount(1); + await expect(page.locator('#rendering').locator('..')).not.toHaveClass(/col-md-6/); + await expect(page.locator('#pagelogic')).toHaveAttribute('href', 'Style1.css'); + }); + + test('honors structured hash run/style parameters alongside a query module URL', async ({ page, diagnostics }) => { + const markdown = readCanonicalFixture('navigationState.txt'); + await installAuthoringRoutes(page, diagnostics, { + modules: { [TEST_MODULE_URL]: markdown }, + }); + + await page.goto( + `/index.html?url=${encodeURIComponent(TEST_MODULE_URL)}#run&style=Style1.css`, + ); + await waitForAuthoringReady(page); + + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + await expect(page.locator('#logic')).toBeChecked(); + await expect(page.locator('#questNavbar')).toBeHidden(); + await expect(page.locator('#markup')).toBeHidden(); + await expect(page.locator('#renderText')).toBeHidden(); + await expect(page.locator('#rendering form.question.active')).toHaveCount(1); + await expect(page.locator('#pagelogic')).toHaveAttribute('href', 'Style1.css'); + }); + + test('makes non-control query parameters available as previous results', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics, { + modules: { [TEST_MODULE_URL]: CONDITIONAL_MARKDOWN }, + }); + const query = new URLSearchParams({ + url: TEST_MODULE_URL, + run: '', + style: 'Style1.css', + config: 'host-only', + EXTERNAL_FLAG: '1', + }); + + await page.goto(`/index.html?${query}`); + await waitForAuthoringReady(page); + await expect(page.locator('#rendering #START.active')).toBeVisible(); + await page.locator('#rendering #START button.next').click(); + + await expect(page.locator('#rendering #VISIBLE.active')).toBeVisible(); + await expect(page.locator('#rendering #HIDDEN')).toHaveCount(0); + await expect(page.locator('#jsonInput')).toHaveValue(''); + }); + + test('loads Demo through URL state and clears that state after a manual edit', async ({ page, diagnostics }) => { + const markdown = readCanonicalFixture('validation.txt'); + await installAuthoringRoutes(page, diagnostics, { demoMarkdown: markdown }); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + await Promise.all([ + page.waitForNavigation({ waitUntil: 'load' }), + page.getByRole('link', { name: 'Demo' }).click(), + ]); + await waitForAuthoringReady(page); + + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + expect(decodeURIComponent(new URL(page.url()).hash)).toBe(`#${DEMO_MODULE_URL}`); + expect(new URL(page.url()).search).toBe(''); + + const textarea = page.locator('#markupTextArea'); + await textarea.fill(`${markdown}\n[MANUAL_NOTE] Locally edited.`); + await textarea.blur(); + + await expect.poll(() => new URL(page.url()).hash).toBe(''); + expect(new URL(page.url()).search).toBe(''); + expect(new URL(page.url()).pathname).toMatch(/\/index\.html$/); + }); + + test('serves the locked Libre Baskerville authoring font without network access', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + const loaded = await page.evaluate(async () => { + await document.fonts.load('16px "Libre Baskerville"'); + return { + ready: document.fonts.check('16px "Libre Baskerville"'), + family: getComputedStyle(document.querySelector('.text-baskerville')).fontFamily, + }; + }); + + expect(loaded.ready).toBe(true); + expect(loaded.family).toContain('Libre Baskerville'); + expect(diagnostics.fulfilledExternalRequests).toContain(LIBRE_BASKERVILLE_STYLESHEET_URL); + expect(diagnostics.fulfilledExternalRequests).toContain(LIBRE_BASKERVILLE_FONT_URL); + }); + + test('preserves the checked-in Bootstrap SRI contract while serving exact local assets', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + const stylesheet = page.locator(`link[href="${AUTHORING_BOOTSTRAP_CSS_URL}"]`); + const script = page.locator(`script[src="${AUTHORING_BOOTSTRAP_JS_URL}"]`); + await expect(stylesheet).toHaveAttribute( + 'integrity', + 'sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN', + ); + await expect(script).toHaveAttribute( + 'integrity', + 'sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL', + ); + await expect(stylesheet).toHaveAttribute('crossorigin', 'anonymous'); + await expect(script).toHaveAttribute('crossorigin', 'anonymous'); + expect(await page.evaluate(() => typeof globalThis.bootstrap?.Modal)).toBe('function'); + expect(diagnostics.fulfilledExternalRequests).toEqual(expect.arrayContaining([ + AUTHORING_BOOTSTRAP_CSS_URL, + AUTHORING_BOOTSTRAP_JS_URL, + ])); + }); + + test('loads a module supplied as the legacy bare hash parameter', async ({ page, diagnostics }) => { + const markdown = readCanonicalFixture('validation.txt'); + await installAuthoringRoutes(page, diagnostics, { demoMarkdown: markdown }); + + await page.goto(`/index.html#${encodeURIComponent(DEMO_MODULE_URL)}`); + await waitForAuthoringReady(page); + + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + await expect(page.locator('#rendering form.question')).toHaveCount(2); + expect(diagnostics.fulfilledExternalRequests).toContain(DEMO_MODULE_URL); + }); + + test('normalizes GitHub blob/raw paths and leaves raw-host URLs unchanged', async ({ page, diagnostics }) => { + const markdown = readCanonicalFixture('validation.txt'); + await installAuthoringRoutes(page, diagnostics, { + modules: { [GITHUB_RAW_MODULE_URL]: markdown }, + }); + + await page.goto(`/index.html?url=${encodeURIComponent(GITHUB_BLOB_MODULE_URL)}`); + await waitForAuthoringReady(page); + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + + await page.goto(`/index.html?url=${encodeURIComponent(GITHUB_WEB_RAW_MODULE_URL)}`); + await waitForAuthoringReady(page); + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + + await page.goto(`/index.html?url=${encodeURIComponent(GITHUB_RAW_MODULE_URL)}`); + await waitForAuthoringReady(page); + await expect(page.locator('#markupTextArea')).toHaveValue(markdown); + + expect( + diagnostics.fulfilledExternalRequests.filter((url) => url === GITHUB_RAW_MODULE_URL), + ).toHaveLength(3); + expect(diagnostics.fulfilledExternalRequests).not.toContain(GITHUB_BLOB_MODULE_URL); + expect(diagnostics.fulfilledExternalRequests).not.toContain(GITHUB_WEB_RAW_MODULE_URL); + }); + + test('renders a deterministic error document for a non-200 module response', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics, { + modules: { + [HTTP_ERROR_MODULE_URL]: { status: 503, body: 'temporarily unavailable' }, + }, + }); + + await page.goto(`/index.html?url=${encodeURIComponent(HTTP_ERROR_MODULE_URL)}`); + await waitForAuthoringReady(page); + + await expect(page.locator('#markupTextArea')).toHaveValue(/Problem retrieving questionnaire module/); + await expect(page.locator('#markupTextArea')).toHaveValue(/HTTP response code: 503/); + expectAndClearConsoleErrors( + diagnostics, + [/Failed to fetch from .*not-found\.txt: 503/], + { allowedPatterns: [/Failed to load resource/] }, + ); + }); + + test('renders a deterministic error document for a rejected module request', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics, { + modules: { + [REJECTED_MODULE_URL]: { abort: 'failed' }, + }, + }); + + await page.goto(`/index.html?url=${encodeURIComponent(REJECTED_MODULE_URL)}`); + await waitForAuthoringReady(page); + + await expect(page.locator('#markupTextArea')).toHaveValue(/Error retrieving questionnaire module/); + expectAndClearConsoleErrors( + diagnostics, + [/Error fetching module from .*rejected\.txt/], + { + allowedPatterns: [ + /Failed to load resource/, + /NetworkError/, + /Load failed/, + /Cross-Origin Request Blocked/, + ], + }, + ); + }); + + test('debounces rapid author edits and renders only the last scheduled markup', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + await page.clock.install(); + + const textarea = page.locator('#markupTextArea'); + await textarea.fill('{"name":"FIRST_EDIT"}\n[FIRST] The discarded edit.'); + await textarea.dispatchEvent('keyup', { key: 'a' }); + await page.clock.fastForward(400); + await textarea.fill('{"name":"SECOND_EDIT"}\n[SECOND] The final edit.'); + await textarea.dispatchEvent('keyup', { key: 'b' }); + await page.clock.fastForward(500); + await expect(page.locator('#rendering #SECOND')).toBeVisible(); + await expect(page.locator('#rendering #FIRST')).toHaveCount(0); + }); + + test('applies language, markup visibility, font-size, and clearing controls', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + await openAuthoringSettings(page); + await page.locator('#langSelect').selectOption('es'); + await page.getByRole('switch', { name: 'Hide Markup' }).check(); + await expect(page.locator('#markup')).toBeHidden(); + await expect(page.locator('#renderText')).toBeHidden(); + await page.getByRole('switch', { name: 'Hide Markup' }).uncheck(); + await expect(page.locator('#markup')).toBeVisible(); + await closeAuthoringSettings(page); + + await renderAuthoringMarkdown(page, readCanonicalFixture('runtimeControls.txt')); + await expect(page.locator('#rendering #CHOICE button.next')).toContainText('Siguiente'); + + const textarea = page.locator('#markupTextArea'); + const initialFontSize = await textarea.evaluate((element) => ( + Number.parseFloat(getComputedStyle(element).fontSize) + )); + await page.getByRole('button', { name: 'Increase Font Size' }).click(); + await expect.poll(() => textarea.evaluate((element) => ( + Number.parseFloat(getComputedStyle(element).fontSize) + ))).toBe(initialFontSize + 1); + await page.getByRole('button', { name: 'Decrease Font Size' }).click(); + await expect.poll(() => textarea.evaluate((element) => ( + Number.parseFloat(getComputedStyle(element).fontSize) + ))).toBe(initialFontSize); + + await textarea.fill(''); + await textarea.dispatchEvent('keyup', { key: 'Backspace' }); + await expect(page.locator('#rendering form.question')).toHaveCount(0); + }); + + test('shows empty and populated response-table states without exposing treeJSON', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + await page.getByRole('button', { name: 'View Current Responses' }).click(); + await expect(page.locator('#currentResponsesTable')).toContainText('No responses found'); + await page.locator('#cache').getByRole('button', { name: 'Close' }).click(); + await expect(page.locator('#cache')).not.toHaveClass(/show/); + + await renderAuthoringMarkdown(page, readCanonicalFixture('runtimeControls.txt')); + await openAuthoringSettings(page); + await page.getByRole('switch', { name: 'Activate Logic' }).check(); + await closeAuthoringSettings(page); + await page.locator('#rendering #CHOICE input[type="radio"]').first().check(); + await page.locator('#rendering #CHOICE button.next').click(); + await expect(page.locator('#rendering #CHECKS.active')).toBeVisible(); + await page.getByRole('button', { name: 'View Current Responses' }).click(); + + const table = page.locator('#currentResponsesTable'); + await expect(table.locator('thead')).toContainText('Id'); + await expect(table.locator('thead')).toContainText('Value'); + await expect(table.locator('tbody')).toContainText('CHOICE'); + await expect(table.locator('tbody')).not.toContainText('treeJSON'); + }); +}); + +test.describe('cross-browser authoring storage and export boundaries @authoring', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !DESKTOP_ENGINES.has(testInfo.project.name), + 'IndexedDB persistence, the injected LocalForage failure, and downloads run in each desktop browser engine.', + ); + }); + + test('uses a nonpersistent host adapter when LocalForage initialization fails @cross-browser-authoring', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics, { + localForageMode: 'initialization-failure', + }); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + expectAndClearConsoleErrors(diagnostics, [/Failed to initialize LocalForage/]); + + await openAuthoringSettings(page); + await page.getByRole('switch', { name: 'Activate Logic' }).check(); + await closeAuthoringSettings(page); + await renderAuthoringMarkdown(page, readCanonicalFixture('validation.txt')); + + await expect(page.locator('#rendering form.question.active')).toHaveCount(1); + await expect(page.locator('#pagelogic')).toHaveAttribute('href', 'ActiveLogic.css'); + expectAndClearConsoleWarnings(diagnostics, [ + /Using memory for getItem \(LF fallback\): previousResults/, + /Using memory for setItem \(LF fallback\): logic/, + ]); + + await page.reload({ waitUntil: 'load' }); + await waitForAuthoringReady(page); + expectAndClearConsoleErrors(diagnostics, [/Failed to initialize LocalForage/]); + expectAndClearConsoleWarnings(diagnostics, [ + /Using memory for getItem \(LF fallback\): previousResults/, + ]); + await expect(page.locator('#logic')).not.toBeChecked(); + await expect(page.locator('#pagelogic')).toHaveAttribute('href', 'Default.css'); + }); + + test('persists settings/results, rejects invalid JSON, and clears previous results @cross-browser-authoring', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + await openAuthoringSettings(page); + await page.getByRole('switch', { name: 'Activate Logic' }).check(); + await page.getByRole('switch', { name: 'Use Styling' }).check(); + await page.getByRole('textbox', { name: 'json input' }).fill('{"PERSISTED":"yes"}'); + await page.getByRole('button', { name: 'Add JSON to Memory' }).click(); + await expect(page.locator('#loadDisplay')).toHaveText('Added JSON successfully.'); + + await page.reload({ waitUntil: 'load' }); + await waitForAuthoringReady(page); + await expect(page.locator('#logic')).toBeChecked(); + await expect(page.locator('#styling')).toBeChecked(); + await expect(page.locator('#jsonInput')).toHaveValue('{"PERSISTED":"yes"}'); + await expect(page.locator('#pagelogic')).toHaveAttribute('href', 'ActiveLogic.css'); + await expect(page.locator('#pagestyle')).toHaveAttribute('href', 'Style1.css'); + + await openAuthoringSettings(page); + await page.getByRole('textbox', { name: 'json input' }).fill('{not valid JSON'); + await page.getByRole('button', { name: 'Add JSON to Memory' }).click(); + await expect(page.locator('#loadDisplay')).toHaveText('Error: Invalid JSON format.'); + expectAndClearConsoleErrors(diagnostics, [/Error updating previous results/]); + + await page.getByRole('textbox', { name: 'json input' }).fill(''); + await page.getByRole('button', { name: 'Add JSON to Memory' }).click(); + await expect(page.locator('#loadDisplay')).toHaveText('Cleared previous results.'); + + await page.getByRole('textbox', { name: 'json input' }).fill('{"CLEAR_ME":true}'); + await page.getByRole('button', { name: 'Add JSON to Memory' }).click(); + await page.getByRole('button', { name: 'Clear Memory' }).click(); + await expect(page.locator('#loadDisplay')).toHaveText('Previous results cleared successfully'); + await expect(page.locator('#jsonInput')).toHaveValue(''); + + await page.reload({ waitUntil: 'load' }); + await waitForAuthoringReady(page); + await expect(page.locator('#jsonInput')).toHaveValue(''); + await expect(page.locator('#logic')).toBeChecked(); + await expect(page.locator('#styling')).toBeChecked(); + }); + + test('stores settings and previous results in the explicit questParams IndexedDB database', async ({ page, diagnostics }) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + + await openAuthoringSettings(page); + await page.getByRole('switch', { name: 'Activate Logic' }).check(); + await page.getByRole('switch', { name: 'Use Styling' }).check(); + await page.getByRole('textbox', { name: 'json input' }).fill('{"IDB":"verified"}'); + await page.getByRole('button', { name: 'Add JSON to Memory' }).click(); + + let storage; + await expect.poll(async () => { + storage = await readQuestParamsIndexedDb(page); + return storage.records; + }).toEqual({ + logic: true, + styling: true, + previousResults: '{"IDB":"verified"}', + }); + expect(storage.supportsDatabaseEnumeration).toBe(true); + expect(storage.databases.map((database) => database.name)).toContain('questParams'); + expect(storage.objectStores).toContain('params'); + }); + + test('downloads the exact authored markup under the requested export name', async ({ page, diagnostics }) => { + const markdown = readCanonicalFixture('navigationState.txt'); + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + await renderAuthoringMarkdown(page, markdown); + await openAuthoringSettings(page); + await page.getByRole('textbox', { name: 'File Name' }).fill('quest-export.txt'); + + const [download] = await Promise.all([ + page.waitForEvent('download'), + page.getByRole('button', { name: 'Save', exact: true }).click(), + ]); + expect(download.suggestedFilename()).toBe('quest-export.txt'); + + const chunks = []; + const stream = await download.createReadStream(); + for await (const chunk of stream) chunks.push(Buffer.from(chunk)); + expect(Buffer.concat(chunks).toString('utf8')).toBe(markdown); + }); +}); diff --git a/tests/e2e/authoringKnownDefects.spec.js b/tests/e2e/authoringKnownDefects.spec.js new file mode 100644 index 0000000..faa2933 --- /dev/null +++ b/tests/e2e/authoringKnownDefects.spec.js @@ -0,0 +1,42 @@ +import { test, expect, expectAndClearConsoleErrors } from './support/test.js'; +import { + installAuthoringRoutes, + openAuthoringSettings, + waitForAuthoringReady, +} from './support/authoring.js'; +import { runtimeDefects } from '../knownDefects/registry.js'; + +const DESKTOP_ENGINES = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); + +test.describe('open authoring regressions @known-defect @authoring', () => { + test('clears previous results after localforage initialization falls back', async ({ page, diagnostics }, testInfo) => { + test.skip( + !DESKTOP_ENGINES.has(testInfo.project.name), + 'Each desktop browser engine characterizes the fallback storage-adapter defect.', + ); + await installAuthoringRoutes(page, diagnostics, { + localForageMode: 'initialization-failure', + }); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + await openAuthoringSettings(page); + + const jsonInput = page.locator('#jsonInput'); + await jsonInput.fill('{"CLEAR_ME":true}'); + await page.getByRole('button', { name: 'Add JSON to Memory' }).click(); + await expect(page.locator('#loadDisplay')).toHaveText('Added JSON successfully.'); + await page.getByRole('button', { name: 'Clear Memory' }).click(); + + test.fail(true, `${runtimeDefects.authoringFallbackClear.localDefectId}: ${runtimeDefects.authoringFallbackClear.reason}`); + await expect.poll(() => diagnostics.consoleErrors.join('\n')).toMatch(/Error clearing LocalForage:.*removeItem/); + const actual = { + status: await page.locator('#loadDisplay').textContent(), + json: await jsonInput.inputValue(), + }; + expectAndClearConsoleErrors(diagnostics, [/Error clearing LocalForage:.*removeItem/]); + expect(actual).toEqual({ + status: 'Previous results cleared successfully', + json: '', + }); + }); +}); diff --git a/tests/e2e/backDeletion.spec.js b/tests/e2e/backDeletion.spec.js new file mode 100644 index 0000000..3a0a65c --- /dev/null +++ b/tests/e2e/backDeletion.spec.js @@ -0,0 +1,124 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + goBack, + goNext, + openParticipant, + selectLabeledResponse, +} from './support/harness.js'; +import { runtimeDefects } from '../knownDefects/registry.js'; + +const questName = 'TEST_NAV'; +const pathQuestion = 'PATH'; +const pathTreeToken = 'PATH?'; +const detailQuestion = 'DETAIL'; + +function applySuccessfulHostDeltas(storeCalls) { + const persistedData = {}; + const namespace = `${questName}.`; + + for (const { changes, status } of storeCalls) { + if (status !== 'fulfilled') continue; + for (const [namespacedKey, value] of Object.entries(changes)) { + if (!namespacedKey.startsWith(namespace)) continue; + const key = namespacedKey.slice(namespace.length); + if (value === undefined) delete persistedData[key]; + else persistedData[key] = value; + } + } + + return persistedData; +} + +function persistedTreeAt(questionToken) { + return JSON.stringify({ + rootNode: { + value: null, + children: [{ value: questionToken, children: [] }], + }, + currentNode: questionToken, + }); +} + +test.describe('Back response deletion and branch pruning @core', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The host-deletion contract runs once in Chromium.'); + }); + + test('clears an answered descendant from the host, tree, and resumed form as the participant backs through it', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + + const detail = activeQuestion(page, detailQuestion).locator('#detail'); + await detail.fill('Abandoned detail'); + await detail.blur(); + await goNext(page); + await expect(activeQuestion(page, 'SUMMARY')).toBeVisible(); + + // The first Back returns to the answered descendant. The second Back is + // the operation that clears that answer and prunes it from PATH's branch. + await goBack(page); + await expect(activeQuestion(page, detailQuestion)).toBeVisible(); + await expect(activeQuestion(page, detailQuestion).locator('#detail')).toHaveValue('Abandoned detail'); + await goBack(page); + await expect(activeQuestion(page, pathQuestion)).toBeVisible(); + + const backedOut = await expectHealthyHarness(page); + const detailClear = backedOut.logs.storeCalls.findLast(({ changes }) => ( + Object.hasOwn(changes, `${questName}.${detailQuestion}`) + && changes[`${questName}.${detailQuestion}`] === undefined + )); + expect(detailClear).toMatchObject({ status: 'fulfilled' }); + expect(Object.hasOwn(detailClear.changes, `${questName}.${detailQuestion}`)).toBe(true); + expect(detailClear.changes[`${questName}.${detailQuestion}`]).toBeUndefined(); + + const prunedTree = JSON.parse(backedOut.state.survey.treeJSON); + expect(prunedTree).toEqual({ + rootNode: { + value: null, + children: [{ value: pathTreeToken, children: [] }], + }, + currentNode: pathTreeToken, + }); + + // Model the host's established undefined-as-delete contract, then supply + // that result to a fresh Quest render exactly as a later PWA session would. + const persistedData = applySuccessfulHostDeltas(backedOut.logs.storeCalls); + expect(persistedData).toMatchObject({ [pathQuestion]: '1' }); + expect(persistedData).not.toHaveProperty(detailQuestion); + expect(JSON.parse(persistedData.treeJSON)).toEqual(prunedTree); + + await openParticipant(page, { + fixture: 'navigationState.txt', + persistedData, + }); + await expect(activeQuestion(page, pathQuestion)).toBeVisible(); + // Reaffirm the retained parent route before revisiting its child. Quest's + // separate raw-tree-token response-restoration behavior is not part of + // this deletion contract. + await activeQuestion(page, pathQuestion).locator('label[for="PATH_1"]').click(); + await goNext(page); + await expect(activeQuestion(page, detailQuestion)).toBeVisible(); + await expect(activeQuestion(page, detailQuestion).locator('#detail')).toHaveValue(''); + await expectHealthyHarness(page); + }); + + test('restores a retained parent response from the raw tree token written by Back @known-defect', async ({ page }) => { + const defect = runtimeDefects.backResumeResponseRestoration; + + await openParticipant(page, { + fixture: 'navigationState.txt', + persistedData: { + [pathQuestion]: '1', + treeJSON: persistedTreeAt(pathTreeToken), + }, + }); + + await expect(activeQuestion(page, pathQuestion)).toBeVisible(); + test.fail(true, `${defect.localDefectId}: ${defect.reason}`); + await expect(activeQuestion(page, pathQuestion).locator('#PATH_1')) + .toBeChecked({ timeout: 1_000 }); + }); +}); diff --git a/tests/e2e/connectExperiencePaths.spec.js b/tests/e2e/connectExperiencePaths.spec.js new file mode 100644 index 0000000..39ec015 --- /dev/null +++ b/tests/e2e/connectExperiencePaths.spec.js @@ -0,0 +1,132 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, +} from './support/harness.js'; +import { readLockedMarkdown, treeAt } from './support/corpus.js'; + +const questName = 'D_506648060'; +const deviceKinds = 'D_145727599'; +const phoneKinds = 'D_470013848'; +const otherPhoneText = 'D_495052121'; +const tabletKinds = 'D_731524314'; +const computerKinds = 'D_403175318'; +const preferredDevice = 'D_260186214'; +const personalDevice = 'D_210120853'; +const joiningReasons = 'D_960544981'; +const joiningReasonsDetail = 'D_674994176'; + +function response(question, response) { + return `${question}_${response}`; +} + +test.describe('locked 2024 Connect Experience derived conditions @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The production derived-condition paths run once in Chromium.'); + }); + + for (const language of ['en', 'es']) { + test(`uses nested ${language} device responses in selectionCount, response conditions, and piped labels`, async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('module2024ConnectExperience', language), + lang: language, + previousResults: { age: '45', yob: '1981' }, + persistedData: { treeJSON: treeAt(deviceKinds) }, + }); + + const devices = activeQuestion(page, deviceKinds); + await devices.locator(`label[for="${response(deviceKinds, '386252749')}"]`).click(); + await devices.locator(`label[for="${response(deviceKinds, '153962804')}"]`).click(); + await goNext(page); + + const phones = activeQuestion(page, phoneKinds); + await phones.locator(`label[for="${response(phoneKinds, '807835037')}"]`).click(); + await phones.locator(`#${otherPhoneText}`).fill('Synthetic phone'); + await phones.locator(`#${otherPhoneText}`).blur(); + await goNext(page); + + const tablets = activeQuestion(page, tabletKinds); + await tablets.locator(`label[for="${response(tabletKinds, '515798638')}"]`).click(); + await goNext(page); + + // The unselected computer branch is skipped. The selectionCount condition + // still sees one nested phone response plus one tablet response. + await expect(activeQuestion(page, computerKinds)).toHaveCount(0); + const preferred = activeQuestion(page, preferredDevice); + await expect(preferred).toBeVisible(); + await expect(preferred.locator(`label[for="${response(preferredDevice, '793072415')}"]`)).toContainText('Synthetic phone'); + await expect(preferred.locator(`label[for="${response(preferredDevice, '515798638')}"]`)).toBeVisible(); + await expect(preferred.locator(`label[for="${response(preferredDevice, '482753957')}"]`)).toBeHidden(); + await expect(preferred).not.toContainText('{$'); + + await preferred.locator(`label[for="${response(preferredDevice, '793072415')}"]`).click(); + await goNext(page); + await expect(activeQuestion(page, personalDevice)).toBeVisible(); + + await goBack(page); + await expect(activeQuestion(page, preferredDevice)).toBeVisible(); + await expect(activeQuestion(page, preferredDevice).locator(`#${response(preferredDevice, '793072415')}`)).toBeChecked(); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.state.survey).toMatchObject({ + [deviceKinds]: ['386252749', '153962804'], + [phoneKinds]: { + [phoneKinds]: ['807835037'], + [otherPhoneText]: 'Synthetic phone', + }, + [tabletKinds]: { + [tabletKinds]: ['515798638'], + }, + [preferredDevice]: '793072415', + }); + expect(snapshot.state.survey).not.toHaveProperty(computerKinds); + + const storedChanges = snapshot.logs.storeCalls.flatMap(({ changes }) => Object.entries(changes)); + expect(storedChanges).toEqual(expect.arrayContaining([ + [`${questName}.${phoneKinds}`, { + [phoneKinds]: ['807835037'], + [otherPhoneText]: 'Synthetic phone', + }], + [`${questName}.${preferredDevice}`, '793072415'], + ])); + }); + + test(`enforces the production ${language} top-three response boundary without losing valid selections`, async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('module2024ConnectExperience', language), + lang: language, + previousResults: { age: '45', yob: '1981' }, + persistedData: { treeJSON: treeAt(joiningReasons) }, + }); + + const reasons = activeQuestion(page, joiningReasons); + const selected = ['925993577', '985468594', '604524950']; + const overLimit = '815468840'; + + for (const responseId of [...selected, overLimit]) { + await reasons.locator(`label[for="${response(joiningReasons, responseId)}"]`).click(); + } + + await expect(reasons.locator('.validation-container')).toBeVisible(); + await goNext(page); + await expect(activeQuestion(page, joiningReasons)).toBeVisible(); + + await reasons.locator(`label[for="${response(joiningReasons, overLimit)}"]`).click(); + await expect(reasons.locator('.validation-container')).toHaveCount(0); + await goNext(page); + await expect(activeQuestion(page, joiningReasonsDetail)).toBeVisible(); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.state.survey[joiningReasons]).toEqual(selected); + expect(snapshot.logs.storeCalls).toEqual(expect.arrayContaining([ + expect.objectContaining({ + changes: expect.objectContaining({ [`${questName}.${joiningReasons}`]: selected }), + }), + ])); + }); + } +}); diff --git a/tests/e2e/constructs.spec.js b/tests/e2e/constructs.spec.js new file mode 100644 index 0000000..f7aec17 --- /dev/null +++ b/tests/e2e/constructs.spec.js @@ -0,0 +1,96 @@ +import { test, expect, expectAndClearConsoleWarnings } from './support/test.js'; +import { expectHealthyHarness, readCanonicalFixture } from './support/harness.js'; + +const DESKTOP_ENGINES = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); + +test.describe('canonical Markdown construct renderer @canonical @constructs', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !DESKTOP_ENGINES.has(testInfo.project.name), + 'The construct renderer is checked in all three desktop browser engines.', + ); + }); + + test('renders every supported question/control family through the public API', async ({ page, diagnostics }) => { + await page.goto('/tests/harness/participant.html'); + await page.waitForFunction(() => window.questHarness?.ready === true); + + const renderResult = await page.evaluate((markdown) => window.questHarness.render({ + activate: false, + isRenderer: true, + markdown, + previousResults: { + LIST_VALUE: ['one', 'two'], + SAVED: 'restored', + SHOW_BLOCK: '1', + SHOW_CHECKBOX: '1', + SHOW_GRID: '1', + SHOW_INLINE: '1', + SHOW_RADIO: '1', + SHOW_ROW: '1', + }, + }), readCanonicalFixture('allConstructs.txt')); + + expect(renderResult.result).toBe(true); + const root = page.locator('#questionnaireRoot'); + + await expect(root.locator('form.question')).toHaveCount(31); + await expect(root.locator('#PLAIN [data-bs-toggle="popover"]')).toHaveAttribute('data-bs-content', 'Synthetic help text'); + await expect(root.locator('#PLAIN img')).toHaveAttribute('src', 'https://episphere.github.io/quest/images/FemaleBaldness1.png'); + await expect(root.locator('#PLAIN .displayif')).toHaveCount(2); + await expect(root.locator('#PLAIN .displayList')).toHaveCount(2); + + await expect(root.locator('#RADIO input[type="radio"]')).toHaveCount(2); + await expect(root.locator('#CHECKBOX input[type="checkbox"]')).toHaveCount(3); + await expect(root.locator('#CHECKBOX')).toHaveAttribute('data-min-count', '1'); + await expect(root.locator('#CHECKBOX')).toHaveAttribute('data-max-count', '2'); + await expect(root.locator('#CHECKBOX input[data-reset="true"]')).toHaveCount(1); + await expect(root.locator('#COMBINED #COMBINED_807835037')).toHaveAttribute('type', 'checkbox'); + await expect(root.locator('#COMBINED #COMBINED_807835037')).toHaveAttribute('skipto', 'EMAIL'); + await expect(root.locator('#COMBINED #COMBINED_TEXT')).toHaveAttribute('type', 'text'); + await expect(root.locator('#COMBINED_TEXTAREA #COMBINED_TEXTAREA_GROUP_1')).toHaveAttribute('type', 'radio'); + await expect(root.locator('#COMBINED_TEXTAREA #COMBINED_TEXTAREA_GROUP_1')).toHaveAttribute('skipto', 'EMAIL'); + await expect(root.locator('#COMBINED_TEXTAREA #COMBINED_TEXTAREA_VALUE')).toHaveJSProperty('tagName', 'TEXTAREA'); + await expect(root.locator('#COMBINED_TEXTAREA label[for="COMBINED_TEXTAREA_GROUP_1"] #COMBINED_TEXTAREA_VALUE')).toHaveCount(1); + await expect(root.locator('#CONFIRM #CONFIRM_COPY')).not.toHaveAttribute('confirm'); + await expect(root.locator('#CONFIRM #CONFIRM_COPY')).toHaveAttribute('data-confirm', 'CONFIRM_ORIGINAL'); + await expect(root.locator('#CONFIRM #CONFIRM_ORIGINAL')).toHaveAttribute('data-confirmation-for', 'CONFIRM_COPY'); + + const scalarTypes = { + EMAIL_VALUE: 'email', + PHONE_VALUE: 'tel', + FULL_SSN_VALUE: 'text', + SHORT_SSN_VALUE: 'text', + ZIP_VALUE: 'text', + DATE_VALUE: 'date', + MONTH_VALUE: 'month', + TIME_VALUE: 'time', + NUMBER_VALUE: 'number', + TEXT_VALUE: 'text', + TEXTBOX_VALUE: 'text', + }; + for (const [id, type] of Object.entries(scalarTypes)) { + await expect(root.locator(`#${id}`), `${id} should render as ${type}`).toHaveAttribute('type', type); + } + await expect(root.locator('#STATE_VALUE')).toHaveJSProperty('tagName', 'SELECT'); + await expect(root.locator('#TEXTAREA_VALUE')).toHaveJSProperty('tagName', 'TEXTAREA'); + await expect(root.locator('#HIDDEN_VALUE')).toHaveAttribute('data-hidden', 'true'); + await expect(root.locator('#YES_NO input[type="radio"]')).toHaveCount(2); + await expect(root.locator('#YES_NO_PREFER input[type="radio"]')).toHaveCount(3); + + await expect(root.locator('#DEFAULT_SKIP input[type="hidden"][skipto="GRID_RADIO"]')).toHaveCount(1); + await expect(root.locator('#NO_RESPONSE_SKIP input.noresponse[skipto="GRID_RADIO"]')).toHaveCount(1); + await expect(root.locator('#GRID_RADIO input[type="radio"]')).toHaveCount(4); + await expect(root.locator('#GRID_CHECKBOX input[type="checkbox"]')).toHaveCount(2); + await expect(root.locator('form.question[id^="LOOP_ITEM_"]')).toHaveCount(2); + + expect(diagnostics.fulfilledExternalRequests).toContain( + 'https://episphere.github.io/quest/images/FemaleBaldness1.png', + ); + expectAndClearConsoleWarnings(diagnostics, [ + /confirm element found: CONFIRM_ORIGINAL/, + /confirm element found \(otherElement\):/, + ]); + await expectHealthyHarness(page); + }); +}); diff --git a/tests/e2e/corpusAsyncHooks.spec.js b/tests/e2e/corpusAsyncHooks.spec.js new file mode 100644 index 0000000..c923877 --- /dev/null +++ b/tests/e2e/corpusAsyncHooks.spec.js @@ -0,0 +1,159 @@ +import { existsSync, readFileSync } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import { test, expect } from './support/test.js'; +import { + flushHarness, + harnessSnapshot, +} from './support/harness.js'; + +const repositoryRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..'); +const corpusRoot = path.join(repositoryRoot, 'tests', 'corpus'); +const lock = JSON.parse(readFileSync(path.join(corpusRoot, 'lock.json'), 'utf8')); +const registry = JSON.parse(readFileSync(path.join(corpusRoot, 'hostPersonas.json'), 'utf8')); +const cacheRoot = path.join(repositoryRoot, lock.cacheRoot, lock.commit); +const canonicalClock = new Date('2024-07-15T12:00:00.000Z'); +const outcomeNames = ['success', 'empty', 'rejection', 'delayed']; +const expectedObservationCount = Object.keys(registry.asyncHooks).length * outcomeNames.length; + +const argumentValues = { + D_627122657: 'Clinical research scientist', + D_796828094: 'Analyzed study data', + D_118061122: 'High school math teacher', + D_518387017: 'Taught algebra and geometry', + D_951357171: '353358909', + D_667908442: '668770150', +}; + +test.describe('locked production asynchronous host contracts @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'Host-hook regression runs in Chromium only.'); + testInfo.setTimeout(180_000); + }); + + test('executes all four host hooks under all deterministic outcomes', async ({ page }) => { + await page.clock.setFixedTime(canonicalClock); + + for (const [hookKey, hook] of Object.entries(registry.asyncHooks).sort(([left], [right]) => ( + left.localeCompare(right) + ))) { + const record = lockedEnglishSurvey(hook.module); + const sourcePath = path.join(cacheRoot, record.path); + expect(existsSync(sourcePath), `Run npm run corpus:fetch for ${record.path}.`).toBe(true); + const markdown = readFileSync(sourcePath, 'utf8'); + + for (const outcomeName of outcomeNames) { + const fixture = registry.asyncFixtures[outcomeName]; + const outcome = materializeOutcome(fixture, hook.fixtureResult); + const fixtureResult = fixture.results[hook.fixtureResult]; + const previousResults = Object.fromEntries(hook.args.map((argument) => [ + argument, + argumentValues[argument], + ])); + expect(Object.values(previousResults).every((value) => value !== undefined)).toBe(true); + + const renderResult = await renderParticipant(page, { + markdown, + lang: 'en', + questVersion: record.version, + persistedData: { treeJSON: treeAt(hook.questionId) }, + previousResults, + asyncQuestionsMap: { + [hook.markupKey]: { func: hook.function, args: hook.args }, + }, + asyncOutcomes: [outcome], + asyncQuestionHtml: hook.function === 'soccer' + ? soccerHtml(fixtureResult) + : undefined, + }); + + if (!renderResult.result) { + const failedSnapshot = await harnessSnapshot(page); + throw new Error(`Production hook render failed: ${JSON.stringify(failedSnapshot.logs.errors)}`); + } + expect(renderResult.activeQuestionId).toBe(hook.questionId); + await flushHarness(page); + const snapshot = await harnessSnapshot(page); + const calls = snapshot.logs.asyncCalls; + const call = calls[0]; + const form = page.locator(`#questionnaireRoot form.question.active#${hook.questionId}`); + const validationMessages = await form.locator('.validation-container').allTextContents(); + const injectedResponses = await form.locator('.response input').evaluateAll((controls) => ( + controls.map((control) => ({ + id: control.id, + value: control.value, + label: document.querySelector(`label[for="${CSS.escape(control.id)}"]`)?.textContent?.trim() ?? null, + })) + )); + + expect(calls).toHaveLength(1); + expect(call.func).toBe(hook.function); + expect(call.args).toEqual([...hook.args.map((argument) => argumentValues[argument]), 'en']); + expect(call.status).toBe(outcomeName === 'rejection' ? 'rejected' : 'fulfilled'); + + if (outcomeName === 'rejection') { + expect(validationMessages.join(' ')).toContain('Error fetching question'); + expect(call.error.message).toBe('Deterministic host callback failure'); + expect(snapshot.logs.errors.some((entry) => ( + entry.message.includes('Deterministic host callback failure') + ))).toBe(true); + } else { + expect(validationMessages).toEqual([]); + expect(snapshot.logs.errors).toEqual([]); + expect(call.value ?? null).toEqual(outcome.value ?? null); + } + + if (hook.function === 'soccer' && ['success', 'delayed'].includes(outcomeName)) { + expect(injectedResponses).toHaveLength(1); + expect(injectedResponses[0]).toMatchObject({ + value: fixtureResult[0].code, + label: fixtureResult[0].title, + }); + } else { + expect(injectedResponses).toEqual([]); + } + } + } + + expect(expectedObservationCount).toBe(16); + }); +}); + +function lockedEnglishSurvey(moduleName) { + const record = lock.files.find((entry) => entry.module === moduleName && entry.locale === 'en'); + if (!record) throw new Error(`No locked English questionnaire exists for ${moduleName}.`); + return record; +} + +async function renderParticipant(page, config) { + await page.goto('/tests/harness/participant.html'); + await page.waitForFunction(() => window.questHarness?.ready === true); + return page.evaluate((renderConfig) => window.questHarness.render(renderConfig), config); +} + +function treeAt(questionId) { + return JSON.stringify({ + rootNode: { + value: null, + children: [{ value: questionId, children: [] }], + }, + currentNode: questionId, + }); +} + +function materializeOutcome(fixture, fixtureResultName) { + const configured = fixture.outcomes[0]; + if (configured.kind !== 'resolve' || Object.hasOwn(configured, 'value')) return configured; + return { + ...configured, + value: fixture.results[fixtureResultName], + }; +} + +function soccerHtml(result) { + if (!Array.isArray(result) || result.length === 0) return undefined; + const [{ code, title }] = result; + const safeId = `HOST_${code.replace(/[^a-zA-Z0-9_-]+/g, '_')}`; + return `
`; +} diff --git a/tests/e2e/corpusConditionProbeRegressions.spec.js b/tests/e2e/corpusConditionProbeRegressions.spec.js new file mode 100644 index 0000000..02d9535 --- /dev/null +++ b/tests/e2e/corpusConditionProbeRegressions.spec.js @@ -0,0 +1,35 @@ +import { harnessSnapshot, openParticipant, readCanonicalFixture } from './support/harness.js'; +import { expect, test } from './support/test.js'; + +const markdown = readCanonicalFixture('nestedTextPresence.txt'); +const desktopProjects = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); + +test.describe('nested-text condition regression @canonical @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(!desktopProjects.has(testInfo.project.name), 'Regression runs in the canonical desktop browser matrix.'); + }); + + test('renders the production-shaped nested-text construct in full-list mode without errors', async ({ page }) => { + await page.goto('/tests/harness/participant.html'); + await page.waitForFunction(() => window.questHarness?.ready === true); + const result = await page.evaluate((source) => window.questHarness.render({ + activate: false, + isRenderer: true, + markdown: source, + lang: 'en', + previousResults: { age: '45', yob: '1979' }, + }), markdown); + expect(result.result).toBe(true); + await expect(page.locator('#D_495052121, #D_638847244, #D_507471937')).toHaveCount(3); + expect((await harnessSnapshot(page)).logs.errors).toEqual([]); + }); + + test('keeps a nested Other response through the condition-dependent participant path', async ({ page }) => { + await openParticipant(page, { markdown }); + await page.locator('label', { hasText: 'Other phone' }).first().click(); + await page.locator('#D_495052121').fill('Synthetic phone'); + await page.getByRole('button', { name: 'Next question' }).click(); + await expect(page.locator('#questionnaireRoot form.question.active#D_731524314')).toBeVisible(); + expect((await harnessSnapshot(page)).logs.errors).toEqual([]); + }); +}); diff --git a/tests/e2e/corpusFullRender.spec.js b/tests/e2e/corpusFullRender.spec.js new file mode 100644 index 0000000..20bbb1c --- /dev/null +++ b/tests/e2e/corpusFullRender.spec.js @@ -0,0 +1,120 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { test, expect } from './support/test.js'; +import { expectHealthyHarness } from './support/harness.js'; +import { corpusLock, lockedCorpusPath, repositoryRoot } from './support/corpus.js'; + +const personaRegistry = JSON.parse(readFileSync(join(repositoryRoot, 'tests', 'corpus', 'hostPersonas.json'), 'utf8')); +const smokePersona = personaRegistry.personas.find(({ id }) => id === 'external-branch-primary'); + +function diagnosticLabel(record) { + return `${record.module} (${record.locale}, ${record.path})`; +} + +function renderedFormId(questionId) { + // `?` and `!` describe response semantics in Markdown; Quest deliberately + // removes them when it assigns the DOM form ID. + return questionId.replace(/[?!]$/, ''); +} + +function asyncQuestionsFor(record) { + return Object.fromEntries(Object.values(personaRegistry.asyncHooks) + .filter(({ module }) => module === record.module) + .map(({ markupKey, function: func, args }) => [markupKey, { func, args }])); +} + +async function openFullListParticipant(page, config) { + await page.goto('/tests/harness/participant.html'); + await page.waitForFunction(() => window.questHarness?.ready === true); + const renderResult = await page.evaluate((renderConfig) => window.questHarness.render(renderConfig), config); + expect(renderResult.result, 'transform.render should report a successful full-list render').toBe(true); + return renderResult; +} + +test.describe('locked production full-list rendering @corpus @full-render', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + testInfo.project.name !== 'chromium-desktop', + 'The complete locked-corpus full render runs once in Chromium.', + ); + }); + + for (const record of corpusLock.files) { + test(`${diagnosticLabel(record)} converts every parser-produced form`, async ({ page }, testInfo) => { + const sourcePath = lockedCorpusPath(record); + expect( + existsSync(sourcePath), + `${diagnosticLabel(record)}: locked corpus cache is absent. Run npm run corpus:fetch for ${corpusLock.commit}.`, + ).toBe(true); + expect(smokePersona, 'The full-render suite requires the primary locked host persona.').toBeTruthy(); + + const markdown = readFileSync(sourcePath, 'utf8'); + const participantInputs = { + ...smokePersona.previousResults, + ...smokePersona.userProfile, + }; + testInfo.annotations.push( + { type: 'host-persona', description: smokePersona.id }, + { type: 'corpus-path', description: record.path }, + { type: 'source-question-count', description: String(record.sourceQuestionCount) }, + ); + + const result = await openFullListParticipant(page, { + activate: false, + asyncQuestionsMap: asyncQuestionsFor(record), + isRenderer: true, + lang: record.locale, + markdown, + previousResults: participantInputs, + questVersion: record.version, + showProgress: false, + }); + + expect(result.errorCount, `${diagnosticLabel(record)}: Quest reported an error during full-list rendering`).toBe(0); + + const renderSummary = await page.locator('#questionnaireRoot').evaluate(async (root) => { + const forms = [...root.querySelectorAll('form.question')]; + const { getStateManager } = await import('/stateManager.js'); + const processor = getStateManager(true).getQuestionProcessor(); + const emptyForms = forms.flatMap((form) => { + const body = form.querySelector('fieldset, table'); + const hasContent = body && ( + body.textContent.trim().length > 0 + || body.querySelector('input, textarea, select, img, a') + ); + return form.id && hasContent ? [] : [{ id: form.id, hasBody: Boolean(body) }]; + }); + return { + formCount: forms.length, + emptyForms, + ids: forms.map((form) => form.id), + processorQuestionCount: processor.questions.length, + processedQuestionCount: processor.processedQuestions.size, + processorQuestionIds: processor.questions.map(({ questionID }) => questionID), + }; + }); + + expect( + renderSummary.formCount, + `${diagnosticLabel(record)}: the renderer must append every form produced by QuestionProcessor.`, + ).toBe(renderSummary.processorQuestionCount); + expect( + renderSummary.processedQuestionCount, + `${diagnosticLabel(record)}: full-list mode must convert every QuestionProcessor entry.`, + ).toBe(renderSummary.processorQuestionCount); + expect( + renderSummary.ids, + `${diagnosticLabel(record)}: rendered forms must remain in QuestionProcessor order.`, + ).toEqual(renderSummary.processorQuestionIds.map(renderedFormId)); + expect(renderSummary.emptyForms, `${diagnosticLabel(record)}: forms must have an ID and rendered content`).toEqual([]); + expect( + [...new Set(renderSummary.ids.filter((id, index) => ( + id !== 'END_OF_LOOP' && renderSummary.ids.indexOf(id) !== index + )))], + `${diagnosticLabel(record)}: participant-facing rendered form IDs must be unique.`, + ).toEqual([]); + + await expectHealthyHarness(page); + }); + } +}); diff --git a/tests/e2e/corpusParticipant.spec.js b/tests/e2e/corpusParticipant.spec.js new file mode 100644 index 0000000..5c93993 --- /dev/null +++ b/tests/e2e/corpusParticipant.spec.js @@ -0,0 +1,51 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + openParticipant, +} from './support/harness.js'; +import { corpusLock, lockedCorpusPath, repositoryRoot } from './support/corpus.js'; + +const personaRegistry = JSON.parse(readFileSync(join(repositoryRoot, 'tests', 'corpus', 'hostPersonas.json'), 'utf8')); +const smokePersona = personaRegistry.personas.find(({ id }) => id === 'external-branch-primary'); + +test.describe('locked production participant startup @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + testInfo.project.name !== 'chromium-desktop', + 'The complete locked-corpus smoke runs once in Chromium.', + ); + }); + + for (const record of corpusLock.files) { + test(`${record.module} (${record.locale}) starts from ${record.path}`, async ({ page }, testInfo) => { + const sourcePath = lockedCorpusPath(record); + expect( + existsSync(sourcePath), + `Locked corpus cache is absent. Run npm run corpus:fetch for ${corpusLock.commit}.`, + ).toBe(true); + + const markdown = readFileSync(sourcePath, 'utf8'); + expect(smokePersona).toBeTruthy(); + const participantInputs = { + ...smokePersona.previousResults, + ...smokePersona.userProfile, + }; + testInfo.annotations.push({ type: 'host-persona', description: smokePersona.id }); + const result = await openParticipant(page, { + markdown, + lang: record.locale, + previousResults: participantInputs, + questVersion: record.version, + }); + + expect(result.activeQuestionId).toBeTruthy(); + await expect(activeQuestion(page)).toBeVisible(); + expect((await activeQuestion(page).innerText()).trim().length).toBeGreaterThan(0); + await expect(page.locator('#questionnaireRoot form.question.active')).toHaveCount(1); + await expectHealthyHarness(page); + }); + } +}); diff --git a/tests/e2e/gridDeepCoverage.spec.js b/tests/e2e/gridDeepCoverage.spec.js new file mode 100644 index 0000000..22c325b --- /dev/null +++ b/tests/e2e/gridDeepCoverage.spec.js @@ -0,0 +1,77 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + flushHarness, + goNext, + harnessSnapshot, + openParticipant, +} from './support/harness.js'; +import { + productionSleepGridMarkdown, + productionSleepGridRows, + selectProductionSleepGridRows, +} from './support/gridDeepCoverageFixtures.js'; + +const CHECKBOX_GRID_PROJECTS = new Set(['chromium-desktop', 'chromium-phone']); + +test.describe('deep participant grid coverage @canonical @responsive', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !CHECKBOX_GRID_PROJECTS.has(testInfo.project.name), + 'This deep grid walk runs at the desktop and phone layout boundaries.', + ); + }); + + test('keeps delegated label selection, responsive state, and storage aligned', async ({ page }, testInfo) => { + await openParticipant(page, { markdown: productionSleepGridMarkdown }); + await goNext(page); + const grid = activeQuestion(page, 'D_981441822'); + const rows = grid.locator('tr[data-gridrow="true"]'); + const expectedRows = productionSleepGridRows; + + await expect(rows).toHaveCount(9); + await expect(grid.locator('th[scope="col"]')).toHaveCount(4); + const firstRowSecondOption = grid.locator('#D_403155173_1'); + await expect(firstRowSecondOption.locator('xpath=following-sibling::label')).toHaveText('Slight Chance'); + await selectProductionSleepGridRows(grid, expectedRows); + await expect(firstRowSecondOption).toBeChecked(); + + if (testInfo.project.name === 'chromium-phone') { + await expect(grid.locator('thead')).toHaveCSS('display', 'none'); + const unselectedFirstOptionLabel = grid.locator('#D_403155173_0').locator('xpath=following-sibling::label'); + await expect(unselectedFirstOptionLabel).toBeVisible(); + await expect(unselectedFirstOptionLabel).toHaveCSS('color', 'rgb(51, 51, 51)'); + await expect(firstRowSecondOption.locator('xpath=following-sibling::label')).toBeVisible(); + await expect(firstRowSecondOption.locator('xpath=following-sibling::label')).toHaveCSS('color', 'rgb(255, 255, 255)'); + } else { + const selectedMarker = await firstRowSecondOption.locator('xpath=following-sibling::label').evaluate((label) => { + const marker = getComputedStyle(label, '::after'); + const unselectedCircle = getComputedStyle(label, '::before'); + return { + markerDisplay: marker.display, + markerColor: marker.backgroundColor, + markerWidth: Number.parseFloat(marker.width), + unselectedCircleDisplay: unselectedCircle.display, + unselectedCircleWidth: Number.parseFloat(unselectedCircle.width), + }; + }); + expect(selectedMarker.markerDisplay).toBe('block'); + expect(selectedMarker.markerColor).toBe('rgb(50, 122, 187)'); + expect(selectedMarker.markerWidth).toBeGreaterThan(0); + expect(selectedMarker.unselectedCircleDisplay).toBe('block'); + expect(selectedMarker.unselectedCircleWidth).toBeGreaterThan(selectedMarker.markerWidth); + } + + const beforeNext = await harnessSnapshot(page); + expect(beforeNext.state.active).toMatchObject({ D_981441822: expectedRows }); + await goNext(page); + await expect(activeQuestion(page, 'GRID_FOLLOWUP')).toBeVisible(); + await flushHarness(page); + + const stored = await harnessSnapshot(page); + expect(stored.state.survey).toMatchObject({ D_981441822: expectedRows }); + expect(stored.logs.storeCalls).toHaveLength(2); + expect(stored.logs.storeCalls.at(-1).changes['TEST_PRODUCTION_GRID.D_981441822']).toEqual(expectedRows); + // The focus-helper lifecycle is asserted in the separate QD-GRID-002 expected-red contract. + }); +}); diff --git a/tests/e2e/gridDeepCoverageKnownDefects.spec.js b/tests/e2e/gridDeepCoverageKnownDefects.spec.js new file mode 100644 index 0000000..c65872d --- /dev/null +++ b/tests/e2e/gridDeepCoverageKnownDefects.spec.js @@ -0,0 +1,43 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + goBack, + goNext, + openParticipant, + waitInHarness, +} from './support/harness.js'; +import { + productionSleepGridMarkdown, + productionSleepGridRows, + selectProductionSleepGridRows, +} from './support/gridDeepCoverageFixtures.js'; +import { runtimeDefects } from '../knownDefects/registry.js'; + +test.describe('grid lifecycle known defects @known-defect', () => { + test('QD-GRID-002 restores real production grid selections without losing the focus helper', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-windows-ua', 'The focus-helper lifecycle runs only through Quest’s Windows accessibility branch.'); + const defect = runtimeDefects.gridBackFocusLifecycle; + + expect(await page.evaluate(() => navigator.userAgent)).toContain('Windows NT'); + await openParticipant(page, { markdown: productionSleepGridMarkdown }); + await goNext(page); + const grid = activeQuestion(page, 'D_981441822'); + await expect(grid).toBeVisible(); + expect(await grid.locator('td.response').count()).toBeGreaterThan(0); + await selectProductionSleepGridRows(grid, productionSleepGridRows); + await goNext(page); + await expect(activeQuestion(page, 'GRID_FOLLOWUP')).toBeVisible(); + + await goBack(page); + await expect(activeQuestion(page, 'D_981441822')).toBeVisible(); + for (const [rowId, value] of Object.entries(productionSleepGridRows)) { + await expect(grid.locator(`input[name="${rowId}"][value="${value}"]`)).toBeChecked(); + } + + test.fail(true, `${defect.localDefectId}: ${defect.reason}`); + await expect(grid.locator('#srFocusHelper')).toHaveCount(1); + await waitInHarness(page, 150); + await expectHealthyHarness(page); + }); +}); diff --git a/tests/e2e/knownDefects.spec.js b/tests/e2e/knownDefects.spec.js new file mode 100644 index 0000000..a556a1a --- /dev/null +++ b/tests/e2e/knownDefects.spec.js @@ -0,0 +1,249 @@ +import { test, expect } from './support/test.js'; +import { activeQuestion, goNext, openParticipant, selectLabeledResponse, waitInHarness } from './support/harness.js'; +import { analyzeQuestAxe, matchesAxeDefect } from './support/axe.js'; +import { accessibilityDefects, axeDefects, runtimeDefects } from '../knownDefects/registry.js'; + +const ASSISTIVE_TECH_ENGINES = new Set(['chromium-desktop', 'webkit-desktop']); +const CHOICE_SEMANTIC_PROJECTS = new Set([ + ...ASSISTIVE_TECH_ENGINES, + 'chromium-windows-ua', +]); +const NATIVE_KEYBOARD_ENGINES = new Set([ + 'chromium-desktop', + 'firefox-desktop', + 'webkit-desktop', + 'chromium-windows-ua', +]); + +async function axeFindingsForDefect(page, defect) { + const findings = await analyzeQuestAxe(page); + return findings.filter((finding) => matchesAxeDefect(finding, defect)); +} + +function characterizeAxeDefect(name, defect, prepare, project = 'chromium-desktop') { + test(name, async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== project, `Characterized in ${project}; blocking scans still run in every desktop engine.`); + await prepare(page); + const findings = await axeFindingsForDefect(page, defect); + test.fail(true, `${defect.localDefectId}: ${defect.reason}`); + expect(findings).toEqual([]); + }); +} + +test.describe('open accessibility regressions @known-defect', () => { + characterizeAxeDefect( + 'progressbar has an accessible name', + axeDefects.progressbarName, + (page) => openParticipant(page, { fixture: 'navigationState.txt' }), + ); + + characterizeAxeDefect( + 'progressbar exposes a valid ARIA value', + axeDefects.progressbarValue, + (page) => openParticipant(page, { fixture: 'navigationState.txt' }), + ); + + characterizeAxeDefect( + 'responsive grid has no empty row-header spacer', + axeDefects.emptyGridHeader, + async (page) => { + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await goNext(page); + await expect(activeQuestion(page, 'GRID_RATE')).toBeVisible(); + }, + ); + + characterizeAxeDefect( + 'validation message meets contrast requirements', + axeDefects.validationContrast, + async (page) => { + await openParticipant(page, { fixture: 'validation.txt' }); + await activeQuestion(page, 'BOUNDED').locator('#bounded').fill('9'); + await goNext(page); + await expect(activeQuestion(page).locator('.validation-container')).toBeVisible(); + }, + ); + + characterizeAxeDefect( + 'bounded numeric input has a non-title label', + axeDefects.validationLabel, + async (page) => { + await openParticipant(page, { fixture: 'validation.txt' }); + await activeQuestion(page, 'BOUNDED').locator('#bounded').fill('9'); + await goNext(page); + await expect(activeQuestion(page).locator('.validation-container')).toBeVisible(); + }, + ); + + test('#1079 exposes named radio roles and their checked state', async ({ page }, testInfo) => { + test.skip(!ASSISTIVE_TECH_ENGINES.has(testInfo.project.name), 'Chromium and WebKit capture the JAWS/VoiceOver semantic baseline.'); + + await openParticipant(page); + await selectLabeledResponse(page, 'Blue'); + const question = activeQuestion(page, 'CHOICE'); + expect(await question.locator('input[type="radio"]').count()).toBe(2); + await expect(question.locator('#CHOICE_1')).toBeChecked(); + test.fail(true, `${accessibilityDefects[1079].issue}: ${accessibilityDefects[1079].automatedContract}`); + expect(await question.getByRole('radio').count()).toBe(2); + await expect(question.getByRole('radio', { name: 'Blue' })).toBeChecked(); + await expect(question.getByRole('radio', { name: 'Green' })).not.toBeChecked(); + }); + + test('#1079 preserves named radio roles and state in the Windows branch', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-windows-ua', 'This semantic contract targets Quest’s Windows-specific branch.'); + + await openParticipant(page); + await selectLabeledResponse(page, 'Green'); + const question = activeQuestion(page, 'CHOICE'); + expect(await question.locator('input[type="radio"]').count()).toBe(2); + await expect(question.locator('#CHOICE_2')).toBeChecked(); + test.fail(true, `${accessibilityDefects[1079].issue}: ${accessibilityDefects[1079].automatedContract}`); + expect(await question.getByRole('radio').count()).toBe(2); + await expect(question.getByRole('radio', { name: 'Blue' })).not.toBeChecked(); + await expect(question.getByRole('radio', { name: 'Green' })).toBeChecked(); + }); + + test('#1079 exposes named checkbox roles and their checked state', async ({ page }, testInfo) => { + test.skip(!CHOICE_SEMANTIC_PROJECTS.has(testInfo.project.name), 'Chromium, WebKit, and the Windows branch capture the assistive-technology semantic baseline.'); + + await openParticipant(page); + await selectLabeledResponse(page, 'Blue'); + await goNext(page); + await selectLabeledResponse(page, 'Email'); + + const question = activeQuestion(page, 'CHECKS'); + expect(await question.locator('input[type="checkbox"]').count()).toBe(2); + await expect(question.locator('#CHECKS_1')).toBeChecked(); + test.fail(true, `${accessibilityDefects[1079].issue}: native checkboxes must expose role, name, and checked state.`); + expect(await question.getByRole('checkbox').count()).toBe(2); + await expect(question.getByRole('checkbox', { name: 'Email' })).toBeChecked(); + await expect(question.getByRole('checkbox', { name: 'Text message' })).not.toBeChecked(); + }); + + test('#1079 exposes each grid choice with its row and column name plus checked state', async ({ page }, testInfo) => { + test.skip(!CHOICE_SEMANTIC_PROJECTS.has(testInfo.project.name), 'Chromium, WebKit, and the Windows branch capture the assistive-technology semantic baseline.'); + + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await goNext(page); + await waitInHarness(page, 550); + const question = activeQuestion(page, 'GRID_RATE'); + await question.locator('tr[data-question-id="GRID_WALK"] label', { hasText: 'Sometimes' }).click(); + await expect(question.locator('#GRID_WALK_1')).toBeChecked(); + + test.fail(true, `${accessibilityDefects[1079].issue}: a grid choice must expose its row prompt, column option, and checked state together.`); + const selected = question.getByRole('radio', { name: /Walking.*Sometimes|Sometimes.*Walking/ }); + await expect(selected).toHaveCount(1); + await expect(selected).toBeChecked(); + await expect(question.getByRole('radio', { name: /Cycling.*Often|Often.*Cycling/ })).not.toBeChecked(); + }); + + test('#1079 restores focus to a Windows list choice after pointer activation', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-windows-ua', 'This focus contract targets Quest’s Windows-specific list branch.'); + + await openParticipant(page); + await waitInHarness(page, 550); + await selectLabeledResponse(page, 'Green'); + await waitInHarness(page, 150); + await expect(activeQuestion(page, 'CHOICE').locator('#CHOICE_2')).toBeChecked(); + test.fail(true, `${accessibilityDefects[1079].issue}: list activation must return focus to the operable native choice.`); + await expect(activeQuestion(page, 'CHOICE').locator('#CHOICE_2')).toBeFocused(); + }); + + test('#1587 retains native radio focus and activates it with Space', async ({ page }, testInfo) => { + test.skip(!NATIVE_KEYBOARD_ENGINES.has(testInfo.project.name), 'The native keyboard baseline runs in every desktop engine.'); + + await openParticipant(page); + const first = activeQuestion(page).locator('#CHOICE_1'); + await expect(first).not.toBeChecked(); + await first.focus(); + // Retaining native input focus is the first currently broken part of this + // keyboard contract. Once fixed, the same test advances to Space itself. + test.fail(true, `${accessibilityDefects[1587].issue}: a native radio must retain focus and Space must check it.`); + await expect(first).toBeFocused(); + await page.keyboard.press('Space'); + const checked = await first.isChecked(); + expect(checked).toBe(true); + }); + + test('#1587 preserves native radio arrow movement and group exclusivity', async ({ page }, testInfo) => { + test.skip(!NATIVE_KEYBOARD_ENGINES.has(testInfo.project.name), 'The native keyboard baseline runs in every desktop engine.'); + + await openParticipant(page); + await selectLabeledResponse(page, 'Blue'); + const first = activeQuestion(page).locator('#CHOICE_1'); + const second = activeQuestion(page).locator('#CHOICE_2'); + await expect(first).toBeChecked(); + await expect(second).not.toBeChecked(); + await first.focus(); + test.fail(true, `${accessibilityDefects[1587].issue}: a native radio must retain focus before arrows move its checked group state.`); + await expect(first).toBeFocused(); + await page.keyboard.press('ArrowRight'); + const actual = { + first: await first.isChecked(), + second: await second.isChecked(), + focused: await page.evaluate(() => document.activeElement?.id), + }; + expect(actual).toEqual({ first: false, second: true, focused: 'CHOICE_2' }); + }); + + test('#1587 retains native checkbox focus and toggles it with Space', async ({ page }, testInfo) => { + test.skip(!NATIVE_KEYBOARD_ENGINES.has(testInfo.project.name), 'The native keyboard baseline runs in every desktop engine.'); + + await openParticipant(page); + await activeQuestion(page).locator('label', { hasText: 'Blue' }).click(); + await activeQuestion(page).getByRole('button', { name: 'Next question' }).click(); + const checkbox = activeQuestion(page, 'CHECKS').locator('#CHECKS_1'); + await expect(checkbox).not.toBeChecked(); + await checkbox.focus(); + test.fail(true, `${accessibilityDefects[1587].issue}: a native checkbox must retain focus and Space must toggle it.`); + await expect(checkbox).toBeFocused(); + await page.keyboard.press('Space'); + const selected = await checkbox.isChecked(); + await page.keyboard.press('Space'); + const deselected = await checkbox.isChecked(); + expect([selected, deselected]).toEqual([true, false]); + }); + + test('#1587 preserves the browser-native select keyboard contract', async ({ page }, testInfo) => { + test.skip(!NATIVE_KEYBOARD_ENGINES.has(testInfo.project.name), 'The native keyboard baseline runs in every desktop engine.'); + + await openParticipant(page, { fixture: 'nativeSelect.txt' }); + const stateSelect = activeQuestion(page, 'STATE').locator('#home_state'); + await stateSelect.focus(); + await expect(stateSelect).toBeFocused(); + await page.keyboard.press('ArrowDown'); + const value = await stateSelect.inputValue(); + test.fail(true, `${accessibilityDefects[1587].issue}: Quest must not trap native select keys.`); + expect(value).not.toBe(''); + }); + + test('restores focus to the submit trigger after Escape closes its dialog', async ({ page }, testInfo) => { + test.skip(!NATIVE_KEYBOARD_ENGINES.has(testInfo.project.name), 'The modal focus contract runs in every desktop engine.'); + + await openParticipant(page, { fixture: 'validation.txt' }); + await activeQuestion(page, 'BOUNDED').locator('#bounded').fill('2'); + await goNext(page); + const trigger = activeQuestion(page, 'END').getByRole('button', { name: 'Submit your survey' }); + const modal = page.locator('#submitModal'); + await trigger.click(); + await expect(modal).toHaveClass(/show/); + await expect(page.locator('#submitModalTitle')).toBeFocused(); + await page.keyboard.press('Escape'); + await waitInHarness(page, 700); + await expect(modal).not.toHaveClass(/show/); + test.fail(true, `${runtimeDefects.submitFocusRestore.localDefectId}: ${runtimeDefects.submitFocusRestore.reason}`); + expect(await trigger.evaluate((element) => element === document.activeElement)).toBe(true); + }); + + test('keeps focus on a response dialog when the pending question-focus timer completes', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The timer race is characterized once in Chromium.'); + + await openParticipant(page); + await goNext(page); + const title = page.locator('#softModalTitle'); + await expect(title).toBeFocused(); + await waitInHarness(page, 550); + test.fail(true, `${runtimeDefects.modalQuestionFocusRace.localDefectId}: ${runtimeDefects.modalQuestionFocusRace.reason}`); + await expect(title).toBeFocused(); + }); +}); diff --git a/tests/e2e/module2PregnancyPaths.spec.js b/tests/e2e/module2PregnancyPaths.spec.js new file mode 100644 index 0000000..86454b0 --- /dev/null +++ b/tests/e2e/module2PregnancyPaths.spec.js @@ -0,0 +1,121 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, +} from './support/harness.js'; +import { readLockedMarkdown, rerenderParticipant, treeAtPath } from './support/corpus.js'; + +const questName = 'D_745268907_V2'; +const currentPregnancy = 'D_849945160'; +const pregnancyCount = 'D_405571048'; +const pregnancyAge = 'D_968816827'; +const pregnancyOutcome = 'D_391951010'; +const pregnancySummary = 'PREGSUMMARY'; + +async function renderFromPersisted(page, { markdown, language, persistedData }) { + const result = await rerenderParticipant(page, { + markdown, + lang: language, + previousResults: { age: '45', yob: '1981' }, + persistedData, + }); + expect(result.result).toBe(true); +} + +test.describe('locked Module 2 pregnancy loop participant paths @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The production pregnancy path runs once in Chromium.'); + }); + + for (const language of ['en', 'es']) { + test(`keeps completed and current ${language} pregnancies isolated across summaries, Back, and resume`, async ({ page }) => { + const markdown = readLockedMarkdown('module2', language); + const age1 = `${pregnancyAge}_1_1`; + const outcome1 = `${pregnancyOutcome}_1_1`; + const summary1 = `${pregnancySummary}_1_1`; + const age2 = `${pregnancyAge}_2_2`; + const outcome2 = `${pregnancyOutcome}_2_2`; + const summary2 = `${pregnancySummary}_2_2`; + + await openParticipant(page, { + markdown, + lang: language, + previousResults: { age: '45', yob: '1981' }, + persistedData: { + [currentPregnancy]: '353358909', + [pregnancyCount]: '2', + treeJSON: treeAtPath([age1]), + }, + }); + + const firstAgeInput = activeQuestion(page, age1).locator('input[type="number"]'); + await expect(firstAgeInput).toHaveAttribute('data-min', '0'); + await expect(firstAgeInput).toHaveAttribute('data-max', '45'); + await firstAgeInput.fill('29'); + await firstAgeInput.blur(); + await goNext(page); + + await expect(activeQuestion(page, outcome1)).toBeVisible(); + await activeQuestion(page, outcome1).locator(`label[for="${outcome1}_306890578"]`).click(); + await goNext(page); + + const firstSummary = activeQuestion(page, summary1); + await expect(firstSummary).toBeVisible(); + await expect(firstSummary).toContainText('29'); + await expect(firstSummary).not.toContainText('{$'); + + await goNext(page); + await expect(activeQuestion(page, age2)).toBeVisible(); + const secondAgeInput = activeQuestion(page, age2).locator('input[type="number"]'); + await secondAgeInput.fill('31'); + await secondAgeInput.blur(); + await goNext(page); + + // The final pregnancy is the current pregnancy. Its age is collected, + // while outcome questions that only apply to completed pregnancies are skipped. + await expect(activeQuestion(page, summary2)).toBeVisible(); + await expect(page.locator(`#questionnaireRoot form.question.active#${outcome2}`)).toHaveCount(0); + await expect(activeQuestion(page, summary2)).toContainText('31'); + await expect(activeQuestion(page, summary2)).not.toContainText('{$'); + + await goBack(page); + await expect(activeQuestion(page, age2)).toBeVisible(); + await expect(activeQuestion(page, age2).locator('input[type="number"]')).toHaveValue('31'); + await goNext(page); + await expect(activeQuestion(page, summary2)).toBeVisible(); + + await flushHarness(page); + const completed = await harnessSnapshot(page); + expect(completed.state.survey).toMatchObject({ + [currentPregnancy]: '353358909', + [pregnancyCount]: '2', + [age1]: '29', + [outcome1]: '306890578', + [age2]: '31', + }); + expect(completed.state.survey).not.toHaveProperty(outcome2); + expect(completed.logs.storeCalls).toEqual(expect.arrayContaining([ + expect.objectContaining({ changes: expect.objectContaining({ [`${questName}.${age1}`]: '29' }) }), + expect.objectContaining({ changes: expect.objectContaining({ [`${questName}.${outcome1}`]: '306890578' }) }), + expect.objectContaining({ changes: expect.objectContaining({ [`${questName}.${age2}`]: '31' }) }), + ])); + + await renderFromPersisted(page, { + markdown, + language, + persistedData: { + ...completed.state.survey, + treeJSON: treeAtPath([age1, outcome1, summary1, age2, summary2]), + }, + }); + await expect(activeQuestion(page, summary2)).toBeVisible(); + await expect(activeQuestion(page, summary2)).toContainText('31'); + await expectHealthyHarness(page); + }); + } +}); diff --git a/tests/e2e/module4AddressPaths.spec.js b/tests/e2e/module4AddressPaths.spec.js new file mode 100644 index 0000000..cd85452 --- /dev/null +++ b/tests/e2e/module4AddressPaths.spec.js @@ -0,0 +1,237 @@ +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, + readCanonicalFixture, + selectLabeledResponse, +} from './support/harness.js'; + +const DESKTOP_ENGINES = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); +const englishAddressFixture = readCanonicalFixture('module4AddressPaths.txt'); +const spanishAddressFixture = readCanonicalFixture('module4AddressPathsSpanish.txt'); +const corpusLock = JSON.parse(readFileSync(resolve('tests/corpus/lock.json'), 'utf8')); + +function readLockedModule4(locale) { + const entry = corpusLock.files.find((file) => file.module === 'module4' && file.locale === locale); + return readFileSync(resolve(corpusLock.cacheRoot, corpusLock.commit, entry.path), 'utf8'); +} + +function treeAt(questionId) { + return JSON.stringify({ + rootNode: { value: null, children: [{ value: questionId, children: [] }] }, + currentNode: questionId, + }); +} + +function treeThrough(previousQuestionId, currentQuestionId) { + return JSON.stringify({ + rootNode: { + value: null, + children: [{ value: previousQuestionId, children: [{ value: currentQuestionId, children: [] }] }], + }, + currentNode: currentQuestionId, + }); +} + +async function fillCompletePrimaryAddress(page) { + const question = activeQuestion(page, 'D_121490150'); + await question.locator('#D_255248624').fill('123'); + await question.locator('#D_945532934').fill('Main Street'); + await question.locator('#D_469838242').fill('Apt 4'); + await question.locator('#D_303500597').fill('Baltimore'); + await question.locator('#D_195068098').fill('Maryland'); + await question.locator('#D_202784871').fill('21201'); + const country = question.locator('#D_831127170'); + await country.fill('United States'); + // Address state is finalized by Quest's delegated focusout handler. Make + // that participant boundary explicit before exercising branching logic. + await country.blur(); +} + +async function continueWithoutAnswering(page, language = 'en') { + const name = language === 'es' ? 'Continuar Sin Responder' : 'Continue Without Answering'; + await page.getByRole('button', { name }).click(); +} + +test.describe('Module 4 residential-address paths @canonical @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(!DESKTOP_ENGINES.has(testInfo.project.name), 'Address paths run in the desktop browser matrix.'); + }); + + test('keeps a complete primary address out of backup and intersection fallbacks, then stores and reuses it', async ({ page }) => { + await openParticipant(page, { markdown: englishAddressFixture }); + await fillCompletePrimaryAddress(page); + await goNext(page); + + await expect(activeQuestion(page, 'HOMEADD4_1')).toBeVisible(); + await expect(activeQuestion(page, 'D_920576363')).toHaveCount(0); + await expect(activeQuestion(page, 'D_804504024')).toHaveCount(0); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Main Street'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Baltimore'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('United States'); + + await goNext(page); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + await expect(activeQuestion(page, 'D_574985342')).toContainText('Main Street'); + await expect(activeQuestion(page, 'D_574985342')).toContainText('Baltimore'); + + await flushHarness(page); + const snapshot = await harnessSnapshot(page); + const completeAddress = { + D_255248624: '123', + D_945532934: 'Main Street', + D_469838242: 'Apt 4', + D_303500597: 'Baltimore', + D_195068098: 'Maryland', + D_202784871: '21201', + D_831127170: 'United States', + }; + expect(snapshot.state.survey.D_121490150).toEqual(completeAddress); + const addressStoreCall = snapshot.logs.storeCalls.find(({ changes }) => ( + Object.hasOwn(changes, 'D_716117817.D_121490150') + )); + expect(addressStoreCall).toBeTruthy(); + expect(addressStoreCall.changes['D_716117817.D_121490150']).toEqual(completeAddress); + expect(Object.keys(addressStoreCall.changes)).toEqual(expect.arrayContaining([ + 'D_716117817.D_121490150', + 'D_716117817.treeJSON', + ])); + await expectHealthyHarness(page); + }); + + test('uses secondary location fields and cross streets only for the no-street partition, then displays all entered values', async ({ page }) => { + await openParticipant(page, { markdown: englishAddressFixture }); + await goNext(page); + await continueWithoutAnswering(page); + await expect(activeQuestion(page, 'D_920576363')).toBeVisible(); + await activeQuestion(page, 'D_920576363').locator('#D_725583683').fill('Lakeview'); + await goNext(page); + await expect(activeQuestion(page, 'D_804504024')).toBeVisible(); + await activeQuestion(page, 'D_804504024').locator('#D_105043152').fill('First Street'); + await activeQuestion(page, 'D_804504024').locator('#D_543135391').fill('Second Avenue'); + await goNext(page); + + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('First Street'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Second Avenue'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Lakeview'); + await flushHarness(page); + const snapshot = await harnessSnapshot(page); + expect(snapshot.state.survey).toMatchObject({ + D_920576363: { D_725583683: 'Lakeview' }, + D_804504024: { D_105043152: 'First Street', D_543135391: 'Second Avenue' }, + }); + await expectHealthyHarness(page); + }); + + test('uses missing-field backup for a partial street address without offering the cross-street fallback', async ({ page }) => { + await openParticipant(page, { markdown: englishAddressFixture }); + await activeQuestion(page, 'D_121490150').locator('#D_255248624').fill('44'); + await activeQuestion(page, 'D_121490150').locator('#D_945532934').fill('Partial Place'); + await goNext(page); + await expect(activeQuestion(page, 'D_920576363')).toBeVisible(); + await activeQuestion(page, 'D_920576363').locator('#D_725583683').fill('Lakeview'); + await goNext(page); + + await expect(activeQuestion(page, 'D_804504024')).toHaveCount(0); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Partial Place'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Lakeview'); + await expectHealthyHarness(page); + }); + + test('keeps an entirely blank address out of the intersection fallback and labels the confirmation as current address', async ({ page }) => { + await openParticipant(page, { markdown: englishAddressFixture }); + await goNext(page); + await continueWithoutAnswering(page); + await expect(activeQuestion(page, 'D_920576363')).toBeVisible(); + await goNext(page); + await continueWithoutAnswering(page); + + await expect(activeQuestion(page, 'D_804504024')).toHaveCount(0); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('current address'); + await expect(activeQuestion(page, 'HOMEADD4_1')).not.toContainText('First Street'); + await expectHealthyHarness(page); + }); + + test('restores primary compound values at the entered-address display and Back plus reset returns to fallback routing', async ({ page }) => { + await openParticipant(page, { + markdown: englishAddressFixture, + persistedData: { + D_121490150: { + D_255248624: '77', D_945532934: 'Restored Road', D_303500597: 'Durham', D_195068098: 'NC', D_202784871: '27701', D_831127170: 'US', + }, + treeJSON: treeThrough('D_121490150', 'HOMEADD4_1'), + }, + }); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Restored Road'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Durham'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('27701'); + + await goBack(page); + await expect(activeQuestion(page, 'D_121490150')).toBeVisible(); + await expect(activeQuestion(page, 'D_121490150').locator('#D_945532934')).toHaveValue('Restored Road'); + await activeQuestion(page, 'D_121490150').getByRole('button', { name: 'Reset this answer' }).click(); + await expect(activeQuestion(page, 'D_121490150').locator('#D_945532934')).toHaveValue(''); + await goNext(page); + await continueWithoutAnswering(page); + await expect(activeQuestion(page, 'D_920576363')).toBeVisible(); + await expectHealthyHarness(page); + }); + + test('keeps English and Spanish production-shaped address IDs and complete-address branching aligned', async ({ page }) => { + await openParticipant(page, { markdown: spanishAddressFixture, lang: 'es' }); + await fillCompletePrimaryAddress(page); + await goNext(page); + + await expect(activeQuestion(page, 'HOMEADD4_1')).toBeVisible(); + await expect(activeQuestion(page, 'D_920576363')).toHaveCount(0); + await expect(activeQuestion(page, 'D_804504024')).toHaveCount(0); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Esta es la información que nos dio para esta ubicación'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Main Street'); + await expect(activeQuestion(page, 'HOMEADD4_1')).toContainText('Baltimore'); + await expectHealthyHarness(page); + }); + + for (const { locale, language } of [ + { locale: 'English', language: 'en' }, + { locale: 'Spanish', language: 'es' }, + ]) { + test(`${locale} locked D_398762737 routes locality-only state to the duplicated-token intersection and blank state past it`, async ({ page }) => { + const markdown = readLockedModule4(language); + await openParticipant(page, { + markdown, + lang: language, + persistedData: { + D_444145120: { D_288498031: 'Lakeview' }, + treeJSON: treeAt('D_444145120'), + }, + }); + await expect(activeQuestion(page, 'D_444145120')).toBeVisible(); + await goNext(page); + await expect(activeQuestion(page, 'D_398762737')).toBeVisible(); + const runtimeCondition = decodeURIComponent( + await activeQuestion(page, 'D_398762737').getAttribute('displayif'), + ); + expect(runtimeCondition).toMatch(/^displayif=noneExist\("D_985267931","D_111275683"\) and someExist\(/); + + await openParticipant(page, { + markdown, + lang: language, + persistedData: { treeJSON: treeAt('D_444145120') }, + }); + await expect(activeQuestion(page, 'D_444145120')).toBeVisible(); + await goNext(page); + await continueWithoutAnswering(page, language); + await expect(activeQuestion(page, 'D_398762737')).toHaveCount(0); + await expect(activeQuestion(page, 'HOMEADD4_2')).toBeVisible(); + await expectHealthyHarness(page); + }); + } +}); diff --git a/tests/e2e/participantAsync.spec.js b/tests/e2e/participantAsync.spec.js new file mode 100644 index 0000000..c1b422f --- /dev/null +++ b/tests/e2e/participantAsync.spec.js @@ -0,0 +1,74 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + goNext, + harnessSnapshot, + openParticipant, + selectLabeledResponse, +} from './support/harness.js'; + +const ASYNC_MAP = { + '[ASYNC?]': { func: 'loadSyntheticOptions', args: ['SEED'] }, +}; + +const ASYNC_HTML = ` + Choose the host-provided option. +
+ + +
+
+ + +
+`; + +const DESKTOP_ENGINES = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); + +test.describe('host-provided asynchronous questions @core @canonical', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(!DESKTOP_ENGINES.has(testInfo.project.name), 'Async host contract runs in each desktop browser engine.'); + }); + + test('passes prior answers and locale to the host, then persists the injected response', async ({ page }) => { + await openParticipant(page, { + fixture: 'asyncQuestion.txt', + asyncQuestionsMap: ASYNC_MAP, + asyncQuestionHtml: ASYNC_HTML, + asyncDelayMs: 75, + }); + await selectLabeledResponse(page, 'Clinical'); + await goNext(page); + + await expect(activeQuestion(page, 'ASYNC')).toBeVisible(); + await expect(activeQuestion(page).locator('#ASYNC_A')).toHaveCount(1); + const afterLoad = await harnessSnapshot(page); + expect(afterLoad.logs.asyncCalls).toHaveLength(1); + expect(afterLoad.logs.asyncCalls[0]).toMatchObject({ + func: 'loadSyntheticOptions', + args: ['1', 'en'], + }); + + await selectLabeledResponse(page, 'Host option B'); + await goNext(page); + await expect(activeQuestion(page, 'END')).toBeVisible(); + const finalSnapshot = await expectHealthyHarness(page); + expect(finalSnapshot.logs.storeCalls.some((call) => call.changes['TEST_ASYNC.ASYNC'] === 'B')).toBe(true); + }); + + test('renders an in-question error and logs host rejection without leaving the question', async ({ page }) => { + await openParticipant(page, { + fixture: 'asyncQuestion.txt', + asyncQuestionsMap: ASYNC_MAP, + asyncOutcomes: [{ kind: 'reject', message: 'Synthetic async failure' }], + }); + await selectLabeledResponse(page, 'Research'); + await goNext(page); + + await expect(activeQuestion(page, 'ASYNC')).toBeVisible(); + await expect(activeQuestion(page).locator('.validation-container')).toContainText('Error fetching question'); + const snapshot = await expectHealthyHarness(page, { allowErrors: true }); + expect(snapshot.logs.errors.some((entry) => entry.message.includes('Synthetic async failure'))).toBe(true); + }); +}); diff --git a/tests/e2e/participantControls.spec.js b/tests/e2e/participantControls.spec.js new file mode 100644 index 0000000..79ae14d --- /dev/null +++ b/tests/e2e/participantControls.spec.js @@ -0,0 +1,212 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + goNext, + harnessSnapshot, + openParticipant, + selectLabeledResponse, +} from './support/harness.js'; + +const CONTROL_PROJECTS = new Set([ + 'chromium-desktop', + 'firefox-desktop', + 'webkit-desktop', + 'chromium-windows-ua', +]); + +test.describe('participant controls @core @canonical', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !CONTROL_PROJECTS.has(testInfo.project.name), + 'Canonical control walks run in the three desktop engines and Windows user-agent branch.', + ); + }); + + test('loads a checked-in synthetic fixture through the manual-test query', async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'One browser verifies the manual harness entry point.'); + + await page.goto('/tests/harness/participant.html?fixture=runtimeControls.txt'); + await page.waitForFunction(() => document.querySelector('#questionnaireRoot form.question.active#CHOICE')); + await expect(activeQuestion(page, 'CHOICE')).toContainText('Which color do you prefer?'); + const snapshot = await expectHealthyHarness(page); + expect(snapshot.logs.renders).toHaveLength(1); + }); + + test('answers common controls, persists deltas, and submits the survey', async ({ page }) => { + await openParticipant(page); + + await expect(activeQuestion(page, 'CHOICE')).toBeVisible(); + await expect(activeQuestion(page).getByRole('button', { name: 'Back to the previous question' })).toHaveCount(0); + await selectLabeledResponse(page, 'Blue'); + await goNext(page); + + await expect(activeQuestion(page, 'CHECKS')).toBeVisible(); + await selectLabeledResponse(page, 'Email'); + await selectLabeledResponse(page, 'Text message'); + await goNext(page); + + await expect(activeQuestion(page, 'TEXT')).toBeVisible(); + await activeQuestion(page).locator('#nickname').fill('Casey'); + await goNext(page); + + await expect(activeQuestion(page, 'NUMBER')).toBeVisible(); + await activeQuestion(page).locator('#visit_count').fill('3'); + await goNext(page); + + await expect(activeQuestion(page, 'STATE')).toBeVisible(); + const stateSelect = activeQuestion(page).locator('#home_state'); + await stateSelect.focus(); + await stateSelect.selectOption('MD'); + await stateSelect.blur(); + await goNext(page); + + await expect(activeQuestion(page, 'DATE')).toBeVisible(); + await activeQuestion(page).locator('#visit_date').fill('2026-01-15'); + await goNext(page); + + await expect(activeQuestion(page, 'TIME')).toBeVisible(); + await activeQuestion(page).locator('#visit_time').fill('09:30'); + await goNext(page); + + await expect(activeQuestion(page, 'END')).toBeVisible(); + await activeQuestion(page).getByRole('button', { name: 'Submit your survey' }).click(); + await expect(page.locator('#submitModal')).toHaveClass(/show/); + await expect(page.locator('#submitModalTitle')).toBeFocused(); + await page.locator('#submitModalButton').click(); + + const snapshot = await expectHealthyHarness(page); + const changedKeys = snapshot.logs.storeCalls.flatMap((call) => Object.keys(call.changes)); + expect(changedKeys).toEqual(expect.arrayContaining([ + 'TEST_RUNTIME.CHOICE', + 'TEST_RUNTIME.CHECKS', + 'TEST_RUNTIME.TEXT', + 'TEST_RUNTIME.NUMBER', + 'TEST_RUNTIME.STATE', + 'TEST_RUNTIME.DATE', + 'TEST_RUNTIME.TIME', + 'TEST_RUNTIME.COMPLETED', + 'TEST_RUNTIME.COMPLETED_TS', + 'TEST_RUNTIME.treeJSON', + ])); + expect(snapshot.logs.storeCalls.at(-1).changes['TEST_RUNTIME.COMPLETED']).toBe(true); + expect(snapshot.state.survey).toMatchObject({ + CHOICE: '1', + CHECKS: ['1', '2'], + TEXT: 'Casey', + NUMBER: '3', + STATE: 'MD', + DATE: '2026-01-15', + TIME: '09:30', + }); + }); + + test('blocks an out-of-range number and clears the error after correction', async ({ page }) => { + await openParticipant(page, { fixture: 'validation.txt' }); + const number = activeQuestion(page, 'BOUNDED').locator('#bounded'); + + await number.fill('9'); + await goNext(page); + await expect(activeQuestion(page, 'BOUNDED')).toBeVisible(); + await expect(activeQuestion(page).locator('.validation-container')).toContainText('Value must be less than or equal to 3'); + + await number.fill('2'); + await number.blur(); + await expect(activeQuestion(page).locator('.validation-container')).toHaveCount(0); + await goNext(page); + await expect(activeQuestion(page, 'END')).toBeVisible(); + await expectHealthyHarness(page); + }); + + test('delegated keyboard submits activate Next, Reset, and Back with Enter and Space @windows-a11y', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + + async function pressAction(name, key, expectedQuestionId) { + const button = activeQuestion(page).getByRole('button', { name }); + await button.focus(); + await expect(button).toBeFocused(); + await page.keyboard.press(key); + + const question = activeQuestion(page, expectedQuestionId); + await expect(question).toBeVisible(); + if (name !== 'Reset this answer') { + await expect(question.locator('.screen-reader-focus')).toBeFocused(); + } + } + + await selectLabeledResponse(page, 'Yes'); + await pressAction('Next question', 'Enter', 'DETAIL'); + + const detail = activeQuestion(page, 'DETAIL').locator('#detail'); + await detail.fill('Reset by Enter'); + await detail.blur(); + await pressAction('Reset this answer', 'Enter', 'DETAIL'); + await expect(detail).toHaveValue(''); + expect((await harnessSnapshot(page)).state.survey.DETAIL).toBeUndefined(); + + await detail.fill('Reset by Space'); + await detail.blur(); + await pressAction('Reset this answer', 'Space', 'DETAIL'); + await expect(detail).toHaveValue(''); + expect((await harnessSnapshot(page)).state.survey.DETAIL).toBeUndefined(); + + await detail.fill('Keyboard detail'); + await detail.blur(); + await pressAction('Next question', 'Space', 'SUMMARY'); + + await pressAction('Back to the previous question', 'Enter', 'DETAIL'); + await expect(activeQuestion(page, 'DETAIL').locator('#detail')).toHaveValue('Keyboard detail'); + + await pressAction('Back to the previous question', 'Space', 'PATH'); + await expect(activeQuestion(page, 'PATH').locator('#PATH_1')).toBeChecked(); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.state.survey).toMatchObject({ PATH: '1' }); + expect(snapshot.state.survey.DETAIL).toBeUndefined(); + + const keyActions = snapshot.logs.events + .filter((event) => event.type === 'keydown' && ['Enter', ' '].includes(event.key)) + .map((event) => ({ + key: event.key === ' ' ? 'Space' : event.key, + action: event.target.className?.split(' ').find((name) => ( + ['next', 'reset', 'previous'].includes(name) + )), + })); + expect(keyActions).toEqual(expect.arrayContaining([ + { key: 'Enter', action: 'next' }, + { key: 'Space', action: 'next' }, + { key: 'Enter', action: 'reset' }, + { key: 'Space', action: 'reset' }, + { key: 'Enter', action: 'previous' }, + { key: 'Space', action: 'previous' }, + ])); + + const delegatedSubmits = snapshot.logs.events.filter((event) => ( + event.type === 'submit' + && ['PATH', 'DETAIL', 'SUMMARY'].includes(event.target.id) + )); + expect(delegatedSubmits).toHaveLength(6); + expect(delegatedSubmits.every((event) => event.defaultPrevented)).toBe(true); + expect(snapshot.logs.host.keydownCount).toBeGreaterThanOrEqual(6); + expect(snapshot.logs.errors).toEqual([]); + }); + + test('uses prefetched text while loading the URL-signaled Quest styles from locked local files', async ({ page, diagnostics }) => { + const questionnaireUrl = 'https://questionnaire.test/prod/module.txt'; + await openParticipant(page, { url: questionnaireUrl, questVersion: '2.0.0-test' }); + + await expect(activeQuestion(page, 'CHOICE')).toBeVisible(); + await expect(page.locator('head link[rel="stylesheet"][href^="blob:"]')).toHaveCount(2); + expect(diagnostics.fulfilledExternalRequests).toEqual(expect.arrayContaining([ + 'https://episphere.github.io/quest-dev/ActiveLogic.css', + 'https://episphere.github.io/quest-dev/Style1.css', + ])); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.logs.renders[0].config).toMatchObject({ + url: questionnaireUrl, + questVersion: '2.0.0-test', + }); + expect(snapshot.logs.retrieveCalls).toHaveLength(1); + }); +}); diff --git a/tests/e2e/participantNavigationState.spec.js b/tests/e2e/participantNavigationState.spec.js new file mode 100644 index 0000000..caa686e --- /dev/null +++ b/tests/e2e/participantNavigationState.spec.js @@ -0,0 +1,272 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, + readCanonicalFixture, + selectLabeledResponse, +} from './support/harness.js'; + +const DESKTOP_ENGINES = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); + +function treeAt(questionId) { + return JSON.stringify({ + rootNode: { value: null, children: [{ value: questionId, children: [] }] }, + currentNode: questionId, + }); +} + +test.describe('participant navigation and state @core @canonical', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(!DESKTOP_ENGINES.has(testInfo.project.name), 'State and error flows run in each desktop browser engine.'); + }); + + test('takes an explicit skip target and Back returns along the visited path', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'No'); + await goNext(page); + + await expect(activeQuestion(page, 'SUMMARY')).toBeVisible(); + await goBack(page); + await expect(activeQuestion(page, 'PATH')).toBeVisible(); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.logs.storeCalls[0].changes['TEST_NAV.PATH']).toBe('0'); + }); + + test('executes default, reset, and no-response transitions through delegated controls', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationBoundaries.txt' }); + await goNext(page); + await expect(activeQuestion(page, 'PATH')).toBeVisible(); + + await selectLabeledResponse(page, 'Explicit route'); + await activeQuestion(page).getByRole('button', { name: 'Reset this answer' }).click(); + await expect(activeQuestion(page).locator('input[type="radio"]:checked')).toHaveCount(0); + + await goNext(page); + await page.getByRole('button', { name: 'Continue Without Answering' }).click(); + await expect(activeQuestion(page, 'NO_RESPONSE_TARGET')).toBeVisible(); + await goNext(page); + await expect(activeQuestion(page, 'END')).toBeVisible(); + await expectHealthyHarness(page); + }); + + test('executes explicit and sequential alternatives on fresh pages', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationBoundaries.txt' }); + await goNext(page); + await selectLabeledResponse(page, 'Explicit route'); + await goNext(page); + await expect(activeQuestion(page, 'EXPLICIT_TARGET')).toBeVisible(); + + await page.reload(); + await page.waitForFunction(() => window.questHarness?.ready === true); + await openParticipant(page, { fixture: 'navigationBoundaries.txt' }); + await goNext(page); + await selectLabeledResponse(page, 'Sequential route'); + await goNext(page); + await expect(activeQuestion(page, 'SEQUENTIAL_TARGET')).toBeVisible(); + await expectHealthyHarness(page); + }); + + for (const iterationCount of [0, 1, 2, 25]) { + test(`executes exactly ${iterationCount} loop iteration(s) without collapsing unrolled IDs`, async ({ page }) => { + await openParticipant(page, { fixture: 'loopBoundaries.txt' }); + await activeQuestion(page, 'D_900000001').locator('#D_900000001').fill(String(iterationCount)); + await goNext(page); + + const observedLoopIds = []; + while (await activeQuestion(page).getAttribute('id') !== 'END') { + const questionId = await activeQuestion(page).getAttribute('id'); + expect(questionId).toMatch(/^ITEM_\d+_\d+$/); + observedLoopIds.push(questionId); + await selectLabeledResponse(page, 'Continue'); + await goNext(page); + } + + expect(observedLoopIds).toHaveLength(iterationCount); + expect(new Set(observedLoopIds).size).toBe(iterationCount); + expect(observedLoopIds).toEqual(Array.from({ length: iterationCount }, (_, index) => ( + `ITEM_${index + 1}_${index + 1}` + ))); + await expectHealthyHarness(page); + }); + } + + test('Back preserves stable unrolled loop IDs from iteration 2 to iteration 1', async ({ page }) => { + await openParticipant(page, { fixture: 'loopBoundaries.txt' }); + await activeQuestion(page, 'D_900000001').locator('#D_900000001').fill('2'); + await goNext(page); + await expect(activeQuestion(page, 'ITEM_1_1')).toBeVisible(); + await selectLabeledResponse(page, 'Continue'); + await goNext(page); + await expect(activeQuestion(page, 'ITEM_2_2')).toBeVisible(); + + await goBack(page); + await expect(activeQuestion(page, 'ITEM_1_1')).toBeVisible(); + await expect(activeQuestion(page).locator('input[type="radio"]:checked')).toHaveValue('1'); + await expectHealthyHarness(page); + }); + + test('restores the exact unrolled loop iteration from persisted host state', async ({ page }) => { + await openParticipant(page, { fixture: 'loopBoundaries.txt' }); + await activeQuestion(page, 'D_900000001').locator('#D_900000001').fill('2'); + await goNext(page); + await selectLabeledResponse(page, 'Continue'); + await goNext(page); + await expect(activeQuestion(page, 'ITEM_2_2')).toBeVisible(); + await selectLabeledResponse(page, 'Continue'); + await goNext(page); + await expect(activeQuestion(page, 'END')).toBeVisible(); + await flushHarness(page); + + const beforeReload = await harnessSnapshot(page); + expect(beforeReload.state.survey).toMatchObject({ D_900000001: '2', ITEM_1_1: '1', ITEM_2_2: '1' }); + expect(beforeReload.state.survey.treeJSON).toContain('ITEM_2_2'); + + await page.reload(); + await page.waitForFunction(() => window.questHarness?.ready === true); + await page.evaluate(({ markdown, persistedData }) => window.questHarness.render({ markdown, persistedData }), { + markdown: readCanonicalFixture('loopBoundaries.txt'), + persistedData: beforeReload.state.survey, + }); + + await expect(activeQuestion(page, 'ITEM_2_2')).toBeVisible(); + const restored = await harnessSnapshot(page); + expect(restored.state.survey).toMatchObject({ D_900000001: '2', ITEM_1_1: '1', ITEM_2_2: '1' }); + await expect(activeQuestion(page).locator('input[type="radio"]:checked')).toHaveValue('1'); + await expectHealthyHarness(page); + }); + + test('restores answers and navigation tree from host-retrieved state after reload', async ({ page }) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + await expect(activeQuestion(page, 'DETAIL')).toBeVisible(); + await activeQuestion(page).locator('#detail').fill('Follow up'); + await goNext(page); + await expect(activeQuestion(page, 'SUMMARY')).toBeVisible(); + await flushHarness(page); + + const beforeReload = await harnessSnapshot(page); + expect(beforeReload.state.survey).toMatchObject({ PATH: '1', DETAIL: 'Follow up' }); + + await page.reload(); + await page.waitForFunction(() => window.questHarness?.ready === true); + await page.evaluate(({ markdown, persistedData }) => window.questHarness.render({ markdown, persistedData }), { + markdown: readCanonicalFixture('navigationState.txt'), + persistedData: beforeReload.state.survey, + }); + + const restored = await harnessSnapshot(page); + expect(restored.state.survey).toMatchObject({ PATH: '1', DETAIL: 'Follow up' }); + expect(['DETAIL', 'SUMMARY']).toContain(restored.activeQuestionId); + await expectHealthyHarness(page); + }); + + test('advances before a delayed successful store operation settles', async ({ page }) => { + await openParticipant(page, { + fixture: 'navigationState.txt', + storeMode: 'delayed', + hostDelayMs: 500, + }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + + expect(await activeQuestion(page).getAttribute('id')).toBe('DETAIL'); + const pendingSnapshot = await harnessSnapshot(page); + expect(pendingSnapshot.logs.storeCalls).toHaveLength(1); + expect(pendingSnapshot.logs.storeCalls[0].outcome).toMatchObject({ + kind: 'resolve', + delayMs: 500, + value: { code: 200 }, + }); + + await flushHarness(page); + await expect(activeQuestion(page, 'DETAIL')).toBeVisible(); + await expectHealthyHarness(page); + }); + + for (const storeFailure of [ + { + label: 'non-200 result', + config: { storeMode: 'non200' }, + }, + { + label: 'rejected operation', + config: { storeMode: 'rejected' }, + }, + ]) { + test(`reverts navigation and reports the host error after a ${storeFailure.label}`, async ({ page }) => { + await openParticipant(page, { + fixture: 'navigationState.txt', + ...storeFailure.config, + }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + await flushHarness(page); + + await expect(activeQuestion(page, 'PATH')).toBeVisible(); + await expect(page.locator('#storeErrorModal')).toHaveClass(/show/); + const snapshot = await expectHealthyHarness(page, { allowErrors: true }); + expect(snapshot.logs.errors.some((entry) => entry.message.includes('syncToStore'))).toBe(true); + expect(snapshot.logs.storeCalls).toHaveLength(1); + expect(snapshot.logs.storeCalls[0].outcome.kind).toBe( + storeFailure.config.storeMode === 'rejected' ? 'reject' : 'resolve', + ); + }); + } + + test('waits for delayed retrieve data and restores it before activating the survey', async ({ page }) => { + await openParticipant(page, { + fixture: 'navigationState.txt', + retrieveDelayMs: 150, + retrieveResult: { + data: { + TEST_NAV: { PATH: '1', treeJSON: treeAt('PATH') }, + }, + }, + }); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.logs.retrieveCalls).toHaveLength(1); + expect(snapshot.state.survey).toMatchObject({ PATH: '1' }); + await expect(activeQuestion(page, 'PATH').locator('#PATH_1')).toBeChecked(); + }); + + test('starts a clean survey and logs a rejected retrieve operation', async ({ page }) => { + await openParticipant(page, { + fixture: 'navigationState.txt', + retrieveError: 'Synthetic retrieve rejection', + }); + + await expect(activeQuestion(page, 'PATH')).toBeVisible(); + await expect(activeQuestion(page).locator('input[type="radio"]:checked')).toHaveCount(0); + const snapshot = await expectHealthyHarness(page, { allowErrors: true }); + expect(snapshot.logs.retrieveCalls).toHaveLength(1); + expect(snapshot.logs.errors.some((entry) => ( + entry.message.includes('Error fetching retrieve function and css') + && entry.message.includes('Synthetic retrieve rejection') + ))).toBe(true); + }); + + test('characterizes current unwrapping of retrieve data that carries a non-200 code', async ({ page }) => { + await openParticipant(page, { + fixture: 'navigationState.txt', + retrieveResult: { + code: 503, + data: { + TEST_NAV: { PATH: '0', treeJSON: treeAt('PATH') }, + }, + }, + }); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.logs.retrieveCalls).toHaveLength(1); + expect(snapshot.state.survey).toMatchObject({ PATH: '0' }); + await expect(activeQuestion(page, 'PATH').locator('#PATH_0')).toBeChecked(); + }); +}); diff --git a/tests/e2e/popoverAccessibility.spec.js b/tests/e2e/popoverAccessibility.spec.js new file mode 100644 index 0000000..fed6514 --- /dev/null +++ b/tests/e2e/popoverAccessibility.spec.js @@ -0,0 +1,46 @@ +import { test, expect } from './support/test.js'; +import { activeQuestion, expectHealthyHarness, openParticipant } from './support/harness.js'; + +const DESKTOP_ENGINES = new Set([ + 'chromium-desktop', + 'firefox-desktop', + 'webkit-desktop', + 'chromium-windows-ua', +]); + +const POPOVER_MARKDOWN = `{"name":"TEST_POPOVER_A11Y"} + +[PLAIN] Please read the following survey help. +|popup|More information|Help title|Synthetic help text|`; + +test.describe('production-shaped popover accessibility @canonical', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !DESKTOP_ENGINES.has(testInfo.project.name), + 'Keyboard popover behavior is checked in each desktop engine and the Windows user-agent branch.', + ); + }); + + test('reveals help on keyboard focus, exposes its content, and dismisses on focus departure', async ({ page }) => { + await openParticipant(page, { markdown: POPOVER_MARKDOWN }); + + const question = activeQuestion(page, 'PLAIN'); + await expect(question.locator('legend')).toContainText('Please read the following survey help.'); + + const trigger = question.getByRole('button', { name: 'More information' }); + await expect(trigger).toBeVisible(); + await trigger.focus(); + await expect(trigger).toBeFocused(); + + const popover = page.locator('.popover').filter({ hasText: 'Synthetic help text' }); + await expect(popover).toBeVisible(); + await expect(popover).toHaveAttribute('role', 'tooltip'); + await expect(popover).toContainText('Help title'); + await expect(popover).toContainText('Synthetic help text'); + await expect(trigger).toHaveAttribute('aria-describedby', await popover.getAttribute('id')); + + await page.locator('#host-after').focus(); + await expect(popover).not.toBeVisible(); + await expectHealthyHarness(page); + }); +}); diff --git a/tests/e2e/productionCompoundForms.spec.js b/tests/e2e/productionCompoundForms.spec.js new file mode 100644 index 0000000..d8a2f88 --- /dev/null +++ b/tests/e2e/productionCompoundForms.spec.js @@ -0,0 +1,173 @@ +import path from 'node:path'; + +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, +} from './support/harness.js'; +import { accessibilityDefects } from '../knownDefects/registry.js'; +import { + readLockedMarkdown, + repositoryRoot, + rerenderParticipant, + treeAt, +} from './support/corpus.js'; + +const dietQuestion = 'D_916948380'; +const dietVegetables = 'D_970075000'; +const dietFruit = 'D_724001040'; +const module4Name = 'D_716117817'; +const commuteModes = 'D_421586693'; +const commuteDuration = 'D_733638576'; +const carDuration = 'D_583216333'; +const taxiDuration = 'D_920653797'; +const commuteFollowUpImage = 'https://user-images.githubusercontent.com/64271614/86169815-34d86f80-bae8-11ea-98a6-1b3de33fedf0.png'; +const localImageAsset = path.join(repositoryRoot, 'tests/e2e/assets/FemaleBaldness1.png'); + +async function chooseRadio(question, name, value) { + await question.locator(`label[for="${name}_${value}"]`).click(); +} + +test.describe('locked production compound-response forms @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'Production compound flows run once in Chromium.'); + }); + + test('Diet Screener keeps radio subgroups independent through partial completion, Back, and reload', async ({ page }) => { + const markdown = readLockedMarkdown('moduleDietScreener'); + await openParticipant(page, { + markdown, + persistedData: { treeJSON: treeAt(dietQuestion, 'INTRO_SRVDSQ') }, + }); + + const question = activeQuestion(page, dietQuestion); + await expect(question).toBeVisible(); + expect(await question.locator('input[type="radio"]').evaluateAll((inputs) => ( + new Set(inputs.map((input) => input.name)).size + ))).toBe(20); + + await chooseRadio(question, dietVegetables, '192247286'); + await chooseRadio(question, dietFruit, '351464854'); + await expect(question.locator(`#${dietVegetables}_192247286`)).toBeChecked(); + await expect(question.locator(`#${dietFruit}_351464854`)).toBeChecked(); + + // Diet Screener allows a participant to continue after a partial page. + // Preserve the two independent values before checking its Back/reload path. + await goNext(page); + await expect(page.getByRole('button', { name: 'Submit your survey' })).toBeVisible(); + + await flushHarness(page); + const partial = await harnessSnapshot(page); + expect(partial.state.survey).toMatchObject({ + [dietQuestion]: { + [dietVegetables]: '192247286', + [dietFruit]: '351464854', + }, + }); + + await page.getByRole('button', { name: 'Back to the previous section' }).click(); + await expect(activeQuestion(page, dietQuestion)).toBeVisible(); + await expect(activeQuestion(page, dietQuestion).locator(`#${dietVegetables}_192247286`)).toBeChecked(); + await expect(activeQuestion(page, dietQuestion).locator(`#${dietFruit}_351464854`)).toBeChecked(); + + await rerenderParticipant(page, { + markdown, + lang: 'en', + persistedData: { + ...partial.state.survey, + treeJSON: treeAt(dietQuestion, 'INTRO_SRVDSQ'), + }, + }); + const restored = activeQuestion(page, dietQuestion); + await expect(restored.locator(`#${dietVegetables}_192247286`)).toBeChecked(); + await expect(restored.locator(`#${dietFruit}_351464854`)).toBeChecked(); + await expect(restored.locator(`#${dietVegetables}_351464854`)).not.toBeChecked(); + await expectHealthyHarness(page); + }); + + test('Module 4 commute duration limits visible subgroups to selected modes and persists them independently', async ({ page }) => { + const markdown = readLockedMarkdown('module4'); + const selectedModes = ['767755239', '385609081']; + // The valid selected-mode transition leads to a production image. It is + // unrelated to this contract, so retain the suite's boundary by + // serving an existing checked-in PNG in place of the remote asset. + await page.route(commuteFollowUpImage, (route) => route.fulfill({ + status: 200, + contentType: 'image/png', + path: localImageAsset, + })); + await openParticipant(page, { + markdown, + persistedData: { + [commuteModes]: selectedModes, + treeJSON: treeAt(commuteDuration, commuteModes), + }, + }); + + const question = activeQuestion(page, commuteDuration); + await expect(question).toBeVisible(); + await expect(question.locator(`input[name="${carDuration}"]`)).toHaveCount(5); + await expect(question.locator(`input[name="${taxiDuration}"]`)).toHaveCount(5); + // Quest visually hides native choice inputs in every response. Assert the + // response containers instead, which distinguishes suppressed mode rows. + await expect(question.locator(`input[name="${carDuration}"]`).first().locator('xpath=..')).toBeVisible(); + await expect(question.locator(`input[name="${taxiDuration}"]`).first().locator('xpath=..')).toBeVisible(); + await expect(question.locator('input[name="D_843066684"]').first().locator('xpath=..')).toBeHidden(); + + await chooseRadio(question, carDuration, '248303092'); + await chooseRadio(question, taxiDuration, '638092100'); + await goNext(page); + await expect(activeQuestion(page, 'D_166943843')).toBeVisible(); + + await flushHarness(page); + const completed = await harnessSnapshot(page); + const expectedDurations = { + [carDuration]: '248303092', + [taxiDuration]: '638092100', + }; + expect(completed.state.survey).toMatchObject({ [commuteDuration]: expectedDurations }); + expect(completed.logs.storeCalls.some(({ changes }) => ( + JSON.stringify(changes[`${module4Name}.${commuteDuration}`]) === JSON.stringify(expectedDurations) + ))).toBe(true); + + await goBack(page); + const returned = activeQuestion(page, commuteDuration); + await expect(returned.locator(`#${carDuration}_248303092`)).toBeChecked(); + await expect(returned.locator(`#${taxiDuration}_638092100`)).toBeChecked(); + + await rerenderParticipant(page, { + markdown, + lang: 'en', + persistedData: { + ...completed.state.survey, + treeJSON: treeAt(commuteDuration, commuteModes), + }, + }); + const restored = activeQuestion(page, commuteDuration); + await expect(restored.locator(`#${carDuration}_248303092`)).toBeChecked(); + await expect(restored.locator(`#${taxiDuration}_638092100`)).toBeChecked(); + await expect(restored.locator('input[name="D_843066684"]').first().locator('xpath=..')).toBeHidden(); + await expectHealthyHarness(page); + }); + + test('Diet Screener choices expose both the food subgroup and answer in their accessible names @known-defect', async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('moduleDietScreener'), + persistedData: { treeJSON: treeAt(dietQuestion) }, + }); + + const question = activeQuestion(page, dietQuestion); + await expect(question).toBeVisible(); + expect(await question.locator('input[type="radio"]').count()).toBeGreaterThan(0); + test.fail(true, `${accessibilityDefects.compoundQuestionContext.localDefectId}: ${accessibilityDefects.compoundQuestionContext.reason}`); + await expect(question.getByRole('radio', { name: /Vegetables.*1 per week|1 per week.*Vegetables/ })) + .toHaveCount(1, { timeout: 1_000 }); + await expect(question.getByRole('radio', { name: /Fruit.*1 per day|1 per day.*Fruit/ })) + .toHaveCount(1, { timeout: 1_000 }); + }); +}); diff --git a/tests/e2e/productionFanoutXor.spec.js b/tests/e2e/productionFanoutXor.spec.js new file mode 100644 index 0000000..afc6ab0 --- /dev/null +++ b/tests/e2e/productionFanoutXor.spec.js @@ -0,0 +1,207 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, +} from './support/harness.js'; +import { readLockedMarkdown, rerenderParticipant, treeAtPath } from './support/corpus.js'; + +const mouthwashQuestion = 'D_479143504'; +const toothbrushFrequency = 'D_498984275'; +const mouthwashProducts = 'D_406270109'; +const alcoholMouthwashFrequency = 'D_349659426'; +const alcoholFreeMouthwashFrequency = 'D_766370065'; + +const surgeries = 'D_729984625'; +const tonsilSurgery = 'D_675055475'; +const gallbladderSurgery = 'D_250003172'; +const ageAtSurgery = 'D_623218391'; +const yearOfSurgery = 'D_802622485'; +const tonsilXor = 'SRVSCR_TONSILS_V1R0'; +const gallbladderXor = 'SRVSCR_GALLREM_V1R0'; + +test.describe('locked production checkbox fan-out and XOR state @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'Production branch paths run once in Chromium.'); + }); + + test('queues selected oral-hygiene and nested mouthwash routes once, in authored order, and restores both checkbox arrays', async ({ page }) => { + const markdown = readLockedMarkdown('moduleMouthwash'); + await openParticipant(page, { + markdown, + persistedData: { treeJSON: treeAtPath([mouthwashQuestion]) }, + }); + + const oralHygiene = activeQuestion(page, mouthwashQuestion); + await oralHygiene.locator(`label[for="${mouthwashQuestion}_203919683"]`).click(); + await oralHygiene.locator(`label[for="${mouthwashQuestion}_390351864"]`).click(); + await goNext(page); + await expect(activeQuestion(page, toothbrushFrequency)).toBeVisible(); + + await activeQuestion(page, toothbrushFrequency).locator(`label[for="${toothbrushFrequency}_858624942"]`).click(); + await goNext(page); + await expect(activeQuestion(page, mouthwashProducts)).toBeVisible(); + + const products = activeQuestion(page, mouthwashProducts); + await products.locator(`label[for="${mouthwashProducts}_950773275"]`).click(); + await products.locator(`label[for="${mouthwashProducts}_762727133"]`).click(); + await goNext(page); + await expect(activeQuestion(page, alcoholMouthwashFrequency)).toBeVisible(); + + await activeQuestion(page, alcoholMouthwashFrequency).locator(`label[for="${alcoholMouthwashFrequency}_858624942"]`).click(); + await goNext(page); + await expect(activeQuestion(page, alcoholFreeMouthwashFrequency)).toBeVisible(); + + await activeQuestion(page, alcoholFreeMouthwashFrequency).locator(`label[for="${alcoholFreeMouthwashFrequency}_858624942"]`).click(); + await goNext(page); + await flushHarness(page); + const completed = await harnessSnapshot(page); + expect(completed.state.survey).toMatchObject({ + [mouthwashQuestion]: ['203919683', '390351864'], + [toothbrushFrequency]: '858624942', + [mouthwashProducts]: ['950773275', '762727133'], + [alcoholMouthwashFrequency]: '858624942', + [alcoholFreeMouthwashFrequency]: '858624942', + }); + expect(JSON.parse(completed.state.survey.treeJSON).currentNode).toBe(alcoholFreeMouthwashFrequency); + + // Returning through the queue must not duplicate or skip a selected route. + await goBack(page); + await expect(activeQuestion(page, alcoholFreeMouthwashFrequency)).toBeVisible(); + await goBack(page); + await expect(activeQuestion(page, alcoholMouthwashFrequency)).toBeVisible(); + await goBack(page); + await expect(activeQuestion(page, mouthwashProducts)).toBeVisible(); + await expect(activeQuestion(page, mouthwashProducts).locator(`#${mouthwashProducts}_950773275`)).toBeChecked(); + await expect(activeQuestion(page, mouthwashProducts).locator(`#${mouthwashProducts}_762727133`)).toBeChecked(); + + const rerendered = await rerenderParticipant(page, { + markdown, + persistedData: { + ...completed.state.survey, + treeJSON: treeAtPath([mouthwashQuestion, toothbrushFrequency, mouthwashProducts, alcoholMouthwashFrequency, alcoholFreeMouthwashFrequency]), + }, + }); + expect(rerendered.result).toBe(true); + await expect(activeQuestion(page, alcoholFreeMouthwashFrequency)).toBeVisible(); + await goBack(page); + await goBack(page); + await expect(activeQuestion(page, mouthwashProducts)).toBeVisible(); + await expect(activeQuestion(page, mouthwashProducts).locator(`#${mouthwashProducts}_950773275`)).toBeChecked(); + await expect(activeQuestion(page, mouthwashProducts).locator(`#${mouthwashProducts}_762727133`)).toBeChecked(); + await expectHealthyHarness(page); + }); + + test('rebuilds a queued multi-select route after Back removes one selected branch', async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('moduleMouthwash'), + persistedData: { treeJSON: treeAtPath([mouthwashQuestion]) }, + }); + + const question = activeQuestion(page, mouthwashQuestion); + await question.locator(`label[for="${mouthwashQuestion}_203919683"]`).click(); + await question.locator(`label[for="${mouthwashQuestion}_390351864"]`).click(); + await goNext(page); + await expect(activeQuestion(page, toothbrushFrequency)).toBeVisible(); + + // The first Next has already materialized both selected targets in the + // queue. Return to the driver, remove only the first route, and require + // Quest to rebuild the queue from the updated checkbox array. + await goBack(page); + const returned = activeQuestion(page, mouthwashQuestion); + await expect(returned.locator(`#${mouthwashQuestion}_203919683`)).toBeChecked(); + await expect(returned.locator(`#${mouthwashQuestion}_390351864`)).toBeChecked(); + await returned.locator(`label[for="${mouthwashQuestion}_203919683"]`).click(); + await expect(returned.locator(`#${mouthwashQuestion}_203919683`)).not.toBeChecked(); + await expect(returned.locator(`#${mouthwashQuestion}_390351864`)).toBeChecked(); + await goNext(page); + await expect(activeQuestion(page, mouthwashProducts)).toBeVisible(); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.state.survey[mouthwashQuestion]).toEqual(['390351864']); + expect(snapshot.state.survey).not.toHaveProperty(toothbrushFrequency); + expect(snapshot.state.survey.treeJSON).not.toContain(toothbrushFrequency); + }); + + test('keeps repeated age/year controls parent-scoped, XOR-exclusive, bounded, and restorable across two surgery paths', async ({ page }) => { + const markdown = readLockedMarkdown('moduleCancerScreeningHistory'); + await openParticipant(page, { + markdown, + previousResults: { age: '45', yob: '1979' }, + persistedData: { treeJSON: treeAtPath([surgeries]) }, + }); + + const surgeryQuestion = activeQuestion(page, surgeries); + await surgeryQuestion.locator(`label[for="${surgeries}_797189152"]`).click(); + await surgeryQuestion.locator(`label[for="${surgeries}_633546100"]`).click(); + await goNext(page); + await expect(activeQuestion(page, tonsilSurgery)).toBeVisible(); + + const tonsil = activeQuestion(page, tonsilSurgery); + const tonsilAge = tonsil.locator(`input[xor="${tonsilXor}"][id="${ageAtSurgery}"]`); + const tonsilYear = tonsil.locator(`input[xor="${tonsilXor}"][id="${yearOfSurgery}"]`); + await expect(tonsilAge).toHaveAttribute('data-max', '45'); + await expect(tonsilYear).toHaveAttribute('data-min', '1979'); + await tonsilAge.fill('46'); + await tonsilAge.blur(); + await expect(tonsil.locator('.validation-container')).toContainText('less than or equal to 45'); + await tonsilAge.fill('12'); + await tonsilAge.blur(); + await tonsilYear.fill('2001'); + await tonsilYear.blur(); + await expect(tonsilAge).toHaveValue(''); + await expect(tonsilYear).toHaveValue('2001'); + await goNext(page); + + await expect(activeQuestion(page, gallbladderSurgery)).toBeVisible(); + const gallbladder = activeQuestion(page, gallbladderSurgery); + const gallbladderAge = gallbladder.locator(`input[xor="${gallbladderXor}"][id="${ageAtSurgery}"]`); + const gallbladderYear = gallbladder.locator(`input[xor="${gallbladderXor}"][id="${yearOfSurgery}"]`); + await expect(gallbladderAge).toHaveAttribute('data-max', '45'); + await expect(gallbladderYear).toHaveAttribute('data-min', '1979'); + await gallbladderYear.fill('1978'); + await gallbladderYear.blur(); + await expect(gallbladder.locator('.validation-container')).toContainText('greater than or equal to 1979'); + await gallbladderYear.fill('2005'); + await gallbladderYear.blur(); + await gallbladderAge.fill('30'); + await gallbladderAge.blur(); + await expect(gallbladderYear).toHaveValue(''); + await expect(gallbladderAge).toHaveValue('30'); + await goNext(page); + await flushHarness(page); + + const completed = await harnessSnapshot(page); + expect(completed.state.survey).toMatchObject({ + [surgeries]: ['797189152', '633546100'], + [tonsilSurgery]: { [yearOfSurgery]: '2001' }, + [gallbladderSurgery]: { [ageAtSurgery]: '30' }, + }); + await goBack(page); + await expect(activeQuestion(page, gallbladderSurgery)).toBeVisible(); + await expect(activeQuestion(page, gallbladderSurgery).locator(`input[xor="${gallbladderXor}"][id="${ageAtSurgery}"]`)).toHaveValue('30'); + await expect(activeQuestion(page, gallbladderSurgery).locator(`input[xor="${gallbladderXor}"][id="${yearOfSurgery}"]`)).toHaveValue(''); + await goBack(page); + await expect(activeQuestion(page, tonsilSurgery)).toBeVisible(); + await expect(activeQuestion(page, tonsilSurgery).locator(`input[xor="${tonsilXor}"][id="${yearOfSurgery}"]`)).toHaveValue('2001'); + await expect(activeQuestion(page, tonsilSurgery).locator(`input[xor="${tonsilXor}"][id="${ageAtSurgery}"]`)).toHaveValue(''); + + const rerendered = await rerenderParticipant(page, { + markdown, + previousResults: { age: '45', yob: '1979' }, + persistedData: { + ...completed.state.survey, + treeJSON: treeAtPath([surgeries, tonsilSurgery, gallbladderSurgery]), + }, + }); + expect(rerendered.result).toBe(true); + await expect(activeQuestion(page, gallbladderSurgery)).toBeVisible(); + await expect(activeQuestion(page, gallbladderSurgery).locator(`input[xor="${gallbladderXor}"][id="${ageAtSurgery}"]`)).toHaveValue('30'); + await expect(activeQuestion(page, gallbladderSurgery).locator(`input[xor="${gallbladderXor}"][id="${yearOfSurgery}"]`)).toHaveValue(''); + await expectHealthyHarness(page); + }); +}); diff --git a/tests/e2e/productionLoopCoverage.spec.js b/tests/e2e/productionLoopCoverage.spec.js new file mode 100644 index 0000000..d12c50f --- /dev/null +++ b/tests/e2e/productionLoopCoverage.spec.js @@ -0,0 +1,224 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, +} from './support/harness.js'; +import { readLockedMarkdown, rerenderParticipant, treeAtPath } from './support/corpus.js'; +const illnessCount = 'D_860011428'; +const firstIllness = 'D_980800222_V2'; +const symptomQuestion = 'D_694503437'; +const siblingCount = 'D_694265648'; +const vaccinationCount = 'D_877074400_V2'; +const vaccinationDate = 'D_715581797_V2'; +const vaccinationMonth = 'D_141616126'; +const vaccinationChoice = 'D_220055064'; +const vaccinationSummary = 'SRVCOV_COV29_V1R0'; + +test.describe('locked production COVID loop participant paths @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'Production loop paths run once in Chromium.'); + }); + + test('skips the first generated Module 1 sibling form before it is displayed when the valid count is zero', async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('module1'), + persistedData: { + [siblingCount]: '0', + treeJSON: treeAtPath([siblingCount]), + }, + }); + + await expect(activeQuestion(page, siblingCount).locator(`#${siblingCount}`)).toHaveValue('0'); + await goNext(page); + await expect(activeQuestion(page, 'SIBCONFIRM')).toBeVisible(); + await goNext(page); + await expect(activeQuestion(page, 'CHILD')).toBeVisible(); + await expect(page.locator('#questionnaireRoot form.question.active#D_406098499_1_1')).toHaveCount(0); + await expectHealthyHarness(page); + }); + + test('captures the generated COVID month form through the delegated focusout path', async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('moduleCOVID19'), + persistedData: { + [illnessCount]: '2', + treeJSON: treeAtPath([`${firstIllness}_2_2`]), + }, + }); + + const month = activeQuestion(page, `${firstIllness}_2_2`).locator('#D_686508359_2_2'); + await expect(month).toBeVisible(); + await month.fill('2024-02'); + await expect(month).toHaveValue('2024-02'); + await month.blur(); + + const beforeNext = await harnessSnapshot(page); + expect(beforeNext.state.active).toMatchObject({ + [`${firstIllness}_2_2`]: '2024-02', + }); + + await goNext(page); + await expect(activeQuestion(page, 'D_366980310_2_2')).toBeVisible(); + await flushHarness(page); + const afterNext = await harnessSnapshot(page); + expect(afterNext.state.survey).toMatchObject({ + [illnessCount]: '2', + [`${firstIllness}_2_2`]: '2024-02', + }); + expect(afterNext.logs.storeCalls.at(-1).changes) + .toMatchObject({ [`D_793330426.${firstIllness}_2_2`]: '2024-02' }); + await expectHealthyHarness(page); + }); + + for (const language of ['en', 'es']) { + test(`completes and resumes two ${language} COVID vaccination iterations with their own stored keys`, async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('moduleCOVID19', language), + lang: language, + persistedData: { + [vaccinationCount]: '2', + treeJSON: treeAtPath([`${vaccinationDate}_1_1`]), + }, + }); + + const completeDate = async (iteration, value) => { + const dateQuestionId = `${vaccinationDate}_${iteration}_${iteration}`; + const month = activeQuestion(page, dateQuestionId).locator(`#${vaccinationMonth}_${iteration}_${iteration}`); + await expect(month).toBeVisible(); + await month.fill(value); + await month.blur(); + await goNext(page); + await expect(activeQuestion(page, `${vaccinationChoice}_${iteration}_${iteration}`)).toBeVisible(); + }; + const completeChoice = async (iteration) => { + const choiceQuestionId = `${vaccinationChoice}_${iteration}_${iteration}`; + await activeQuestion(page).locator(`label[for="${choiceQuestionId}_657978450"]`).click(); + await goNext(page); + await expect(activeQuestion(page, `${vaccinationSummary}_${iteration}_${iteration}`)).toBeVisible(); + }; + + await completeDate(1, '2021-02'); + await expect(activeQuestion(page, `${vaccinationChoice}_1_1`)).toBeVisible(); + await completeChoice(1); + + await goNext(page); + await expect(activeQuestion(page, `${vaccinationDate}_2_2`)).toBeVisible(); + await goBack(page); + await expect(activeQuestion(page, `${vaccinationSummary}_1_1`)).toBeVisible(); + await goNext(page); + await expect(activeQuestion(page, `${vaccinationDate}_2_2`)).toBeVisible(); + + await completeDate(2, '2022-03'); + await completeChoice(2); + await goNext(page); + await expect(activeQuestion(page, 'END')).toBeVisible(); + await flushHarness(page); + + const persisted = await harnessSnapshot(page); + expect(persisted.state.survey).toMatchObject({ + [vaccinationCount]: '2', + [`${vaccinationDate}_1_1`]: '2021-02', + [`${vaccinationChoice}_1_1`]: { + [`${vaccinationChoice}_1_1`]: '657978450', + }, + [`${vaccinationDate}_2_2`]: '2022-03', + [`${vaccinationChoice}_2_2`]: { + [`${vaccinationChoice}_2_2`]: '657978450', + }, + }); + expect(persisted.state.survey).not.toHaveProperty(vaccinationChoice); + expect(JSON.parse(persisted.state.survey.treeJSON).currentNode).toBe(`${vaccinationSummary}_2_2`); + const storedChanges = persisted.logs.storeCalls.map(({ changes }) => changes); + expect(storedChanges).toEqual(expect.arrayContaining([ + expect.objectContaining({ [`D_793330426.${vaccinationDate}_1_1`]: '2021-02' }), + expect.objectContaining({ [`D_793330426.${vaccinationChoice}_1_1`]: expect.any(Object) }), + expect.objectContaining({ [`D_793330426.${vaccinationDate}_2_2`]: '2022-03' }), + expect.objectContaining({ [`D_793330426.${vaccinationChoice}_2_2`]: expect.any(Object) }), + ])); + + await rerenderParticipant(page, { + markdown: readLockedMarkdown('moduleCOVID19', language), + persistedData: persisted.state.survey, + lang: language, + }); + // Quest stores treeJSON before swapping the next form, so a resumed participant + // returns to the persisted summary rather than the just-rendered destination. + await expect(activeQuestion(page, `${vaccinationSummary}_2_2`)).toBeVisible(); + await expectHealthyHarness(page); + }); + } + + for (const language of ['en', 'es']) { + test(`restores ${language} COVID iteration 2 and Back crosses its real loop boundary`, async ({ page }) => { + await openParticipant(page, { + markdown: readLockedMarkdown('moduleCOVID19', language), + lang: language, + persistedData: { + [illnessCount]: '2', + D_686508359_1_1: '2024-01', + [`${symptomQuestion}_1_1`]: '104430631', + treeJSON: treeAtPath([ + `${symptomQuestion}_1_1`, + '_CONTINUE1_1_1', + `${firstIllness}_2_2`, + ]), + }, + }); + + await expect(activeQuestion(page, `${firstIllness}_2_2`)).toBeVisible(); + await goBack(page); + await expect(activeQuestion(page, `${symptomQuestion}_1_1`)).toBeVisible(); + await expect(activeQuestion(page).locator(`input[value="104430631"]`)).toBeChecked(); + + const snapshot = await expectHealthyHarness(page); + expect(snapshot.state.survey).toMatchObject({ + [illnessCount]: '2', + D_686508359_1_1: '2024-01', + [`${symptomQuestion}_1_1`]: '104430631', + }); + }); + + test(`stores and resumes ${language} COVID iteration-specific choice response keys`, async ({ page }) => { + const initialData = { + [illnessCount]: '2', + treeJSON: treeAtPath(['D_366980310_2_2']), + }; + await openParticipant(page, { + markdown: readLockedMarkdown('moduleCOVID19', language), + lang: language, + persistedData: initialData, + }); + + await expect(activeQuestion(page, 'D_366980310_2_2')).toBeVisible(); + await activeQuestion(page).locator('label[for="D_366980310_2_2_104430631"]').click(); + await goNext(page); + await expect(activeQuestion(page, 'D_498462481_2_2')).toBeVisible(); + await flushHarness(page); + + const beforeReload = await harnessSnapshot(page); + expect(beforeReload.state.survey).toMatchObject({ + [illnessCount]: '2', + D_366980310_2_2: '104430631', + }); + expect(beforeReload.state.survey).not.toHaveProperty('D_366980310'); + + await rerenderParticipant(page, { + markdown: readLockedMarkdown('moduleCOVID19', language), + persistedData: beforeReload.state.survey, + lang: language, + }); + + await expect(activeQuestion(page, 'D_366980310_2_2')).toBeVisible(); + const restored = await expectHealthyHarness(page); + expect(restored.state.survey).toMatchObject({ + [illnessCount]: '2', + D_366980310_2_2: '104430631', + }); + }); + } +}); diff --git a/tests/e2e/productionPiping.spec.js b/tests/e2e/productionPiping.spec.js new file mode 100644 index 0000000..a6927c7 --- /dev/null +++ b/tests/e2e/productionPiping.spec.js @@ -0,0 +1,275 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goBack, + goNext, + harnessSnapshot, + openParticipant, +} from './support/harness.js'; +import { readLockedMarkdown, rerenderParticipant, treeAtPath } from './support/corpus.js'; + +const module1Name = 'D_726699695_V2'; +const module2Name = 'D_745268907_V2'; +const covidName = 'D_793330426'; + +const siblingCount = 'D_694265648'; +const siblingName = 'D_406098499'; +const siblingSex = 'D_579563781'; + +const fertilityMedications = 'D_881200765'; +const otherMedication = 'D_762700622'; +const otherMedicationDuration = 'D_466346054'; + +const illnessCount = 'D_860011428'; +const symptomPresence = 'D_694503437'; +const otherSymptoms = 'D_110872086'; +const otherSymptomsText = 'D_637540387'; +const stillExperiencingOtherSymptoms = 'D_591826144'; +const otherSymptomsDuration = 'D_934384452'; +const illnessSummary = 'SRVCOV_COVSUMMARY_V1R0'; +const illnessDate = 'D_686508359'; +const illnessSymptoms = 'D_705336878'; +const illnessOtherSymptomsText = 'D_218852075'; + +const vaccinationCount = 'D_877074400_V2'; +const vaccinationQuestion = 'D_715581797_V2'; +const vaccinationDate = 'D_141616126'; +const vaccinationChoice = 'D_220055064'; +const otherVaccineText = 'D_395747093'; +const vaccinationSummary = 'SRVCOV_COV29_V1R0'; + +function expectNoRawPipe(question) { + return expect(question).not.toContainText('{$'); +} + +test.describe('locked production response piping @corpus', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'Production piping paths run once in Chromium.'); + }); + + for (const language of ['en', 'es']) { + test(`keeps ${language} sibling names isolated by loop iteration through Back and resume`, async ({ page }) => { + const firstNameQuestion = `${siblingName}_1_1`; + const firstSexQuestion = `${siblingSex}_1_1`; + const nameBeforeEdit = 'Ari'; + const nameAfterEdit = 'Bea'; + const markdown = readLockedMarkdown('module1', language); + + await openParticipant(page, { + markdown, + lang: language, + persistedData: { + [siblingCount]: '2', + [firstNameQuestion]: nameBeforeEdit, + treeJSON: treeAtPath([siblingCount, 'SIBCONFIRM', firstNameQuestion, firstSexQuestion]), + }, + }); + + await expect(activeQuestion(page, firstSexQuestion)).toContainText(nameBeforeEdit); + await expectNoRawPipe(activeQuestion(page, firstSexQuestion)); + await activeQuestion(page, firstSexQuestion).locator(`label[for="${firstSexQuestion}_536341288"]`).click(); + await goNext(page); + await goBack(page); + await goBack(page); + + await expect(activeQuestion(page, firstNameQuestion)).toBeVisible(); + // The generated form carries the loop suffix, while the authored + // nickname textbox retains its source input ID. + const nameInput = activeQuestion(page, firstNameQuestion).locator('input[type="text"]'); + await nameInput.fill(nameAfterEdit); + await nameInput.blur(); + await goNext(page); + await expect(activeQuestion(page, firstSexQuestion)).toContainText(nameAfterEdit); + await expect(activeQuestion(page, firstSexQuestion)).not.toContainText(nameBeforeEdit); + + await flushHarness(page); + const edited = await harnessSnapshot(page); + expect(edited.state.survey).toMatchObject({ [firstNameQuestion]: nameAfterEdit }); + expect(edited.logs.storeCalls.some(({ changes }) => ( + changes[`${module1Name}.${firstNameQuestion}`] === nameAfterEdit + ))).toBe(true); + + await rerenderParticipant(page, { + markdown, + lang: language, + persistedData: { + ...edited.state.survey, + [`${siblingName}_2_2`]: 'Cleo', + treeJSON: treeAtPath([`${siblingSex}_2_2`]), + }, + }); + await expect(activeQuestion(page, `${siblingSex}_2_2`)).toContainText('Cleo'); + await expect(activeQuestion(page, `${siblingSex}_2_2`)).not.toContainText(nameAfterEdit); + await expectHealthyHarness(page); + }); + + test(`pipes ${language} nested Other medication text into its follow-up and preserves its compound response`, async ({ page }) => { + const medication = 'NovaMed 42'; + await openParticipant(page, { + markdown: readLockedMarkdown('module2', language), + lang: language, + persistedData: { treeJSON: treeAtPath([fertilityMedications]) }, + }); + + const source = activeQuestion(page, fertilityMedications); + await source.locator(`label[for="${fertilityMedications}_807835037"]`).click(); + const otherInput = source.locator(`#${otherMedication}`); + await otherInput.fill(medication); + await otherInput.blur(); + await expect(source.locator(`#${fertilityMedications}_807835037`)).toBeChecked(); + await goNext(page); + + const followUp = activeQuestion(page, otherMedicationDuration); + await expect(followUp).toContainText(medication); + await expectNoRawPipe(followUp); + await flushHarness(page); + const snapshot = await harnessSnapshot(page); + expect(snapshot.state.survey).toMatchObject({ + [fertilityMedications]: { + [fertilityMedications]: ['807835037'], + [otherMedication]: medication, + }, + }); + expect(snapshot.logs.storeCalls.some(({ changes }) => ( + changes[`${module2Name}.${fertilityMedications}`]?.[otherMedication] === medication + ))).toBe(true); + + await goBack(page); + await expect(activeQuestion(page, fertilityMedications).locator(`#${fertilityMedications}_807835037`)).toBeChecked(); + await expect(activeQuestion(page, fertilityMedications).locator(`#${otherMedication}`)).toHaveValue(medication); + await expectHealthyHarness(page); + }); + + test(`pipes ${language} Other symptom text into both downstream questions and restores it`, async ({ page }) => { + const symptomText = 'vertigo and blurred vision'; + const markdown = readLockedMarkdown('moduleCOVID19', language); + const sourceState = { + [illnessCount]: '1', + [`${symptomPresence}_1_1`]: '353358909', + treeJSON: treeAtPath([`${otherSymptoms}`]), + }; + await openParticipant(page, { markdown, lang: language, persistedData: sourceState }); + + const source = activeQuestion(page, otherSymptoms); + await source.locator(`label[for="${otherSymptoms}_707601969"]`).click(); + const input = source.locator(`#${otherSymptomsText}`); + await input.fill(symptomText); + await input.blur(); + await goNext(page); + await expect(activeQuestion(page, stillExperiencingOtherSymptoms)).toContainText(symptomText); + await expectNoRawPipe(activeQuestion(page, stillExperiencingOtherSymptoms)); + + await flushHarness(page); + const snapshot = await harnessSnapshot(page); + expect(snapshot.state.survey).toMatchObject({ + [otherSymptoms]: { + [otherSymptoms]: '707601969', + [otherSymptomsText]: symptomText, + }, + }); + + await goBack(page); + await expect(activeQuestion(page, otherSymptoms).locator(`#${otherSymptoms}_707601969`)).toBeChecked(); + await expect(activeQuestion(page, otherSymptoms).locator(`#${otherSymptomsText}`)).toHaveValue(symptomText); + + await rerenderParticipant(page, { + markdown, + lang: language, + persistedData: { + ...snapshot.state.survey, + treeJSON: treeAtPath([otherSymptomsDuration]), + }, + }); + await expect(activeQuestion(page, otherSymptomsDuration)).toContainText(symptomText); + await expectNoRawPipe(activeQuestion(page, otherSymptomsDuration)); + await expectHealthyHarness(page); + }); + + test(`pipes ${language} looped vaccination date and Other vaccine text into its summary and resume`, async ({ page }) => { + const vaccine = 'Covaxin'; + const dateQuestion = `${vaccinationQuestion}_1_1`; + const choiceQuestion = `${vaccinationChoice}_1_1`; + const monthInput = `${vaccinationDate}_1_1`; + const otherInput = `${otherVaccineText}_1_1`; + const summaryQuestion = `${vaccinationSummary}_1_1`; + const markdown = readLockedMarkdown('moduleCOVID19', language); + + await openParticipant(page, { + markdown, + lang: language, + persistedData: { + [vaccinationCount]: '1', + treeJSON: treeAtPath([dateQuestion]), + }, + }); + await activeQuestion(page, dateQuestion).locator(`#${monthInput}`).fill('2022-03'); + await activeQuestion(page, dateQuestion).locator(`#${monthInput}`).blur(); + await goNext(page); + await expect(activeQuestion(page, choiceQuestion)).toBeVisible(); + await activeQuestion(page, choiceQuestion).locator(`label[for="${choiceQuestion}_807835037"]`).click(); + await activeQuestion(page, choiceQuestion).locator(`#${otherInput}`).fill(vaccine); + await activeQuestion(page, choiceQuestion).locator(`#${otherInput}`).blur(); + await goNext(page); + + const summary = activeQuestion(page, summaryQuestion); + await expect(summary).toContainText('2022-03'); + await expect(summary).toContainText(vaccine); + await expectNoRawPipe(summary); + await flushHarness(page); + const snapshot = await harnessSnapshot(page); + expect(snapshot.state.survey).toMatchObject({ + [vaccinationCount]: '1', + [dateQuestion]: '2022-03', + [choiceQuestion]: { + [choiceQuestion]: '807835037', + [otherInput]: vaccine, + }, + }); + expect(snapshot.logs.storeCalls.some(({ changes }) => ( + changes[`${covidName}.${choiceQuestion}`]?.[otherInput] === vaccine + ))).toBe(true); + + // Quest persists the current form immediately before it swaps to the + // summary. Supply the completed navigation tree to exercise a true + // resume at the piped summary, rather than the preceding choice form. + await rerenderParticipant(page, { + markdown, + lang: language, + persistedData: { + ...snapshot.state.survey, + treeJSON: treeAtPath([dateQuestion, choiceQuestion, summaryQuestion]), + }, + }); + await expect(activeQuestion(page, summaryQuestion)).toContainText('2022-03'); + await expect(activeQuestion(page, summaryQuestion)).toContainText(vaccine); + await expectHealthyHarness(page); + }); + + test(`renders ${language} checkbox Other symptom text in the real COVID displayList summary`, async ({ page }) => { + const otherSymptom = 'post-viral brain fog'; + const summaryQuestion = `${illnessSummary}_1_1`; + await openParticipant(page, { + markdown: readLockedMarkdown('moduleCOVID19', language), + lang: language, + persistedData: { + [illnessCount]: '1', + [`${illnessDate}_1_1`]: '2024-02', + [`${symptomPresence}_1_1`]: '353358909', + [`${illnessSymptoms}_1_1`]: { + [`${illnessSymptoms}_1_1`]: ['807835037'], + [`${illnessOtherSymptomsText}_1_1`]: otherSymptom, + }, + treeJSON: treeAtPath([summaryQuestion]), + }, + }); + + const summary = activeQuestion(page, summaryQuestion); + await expect(summary).toContainText(otherSymptom); + await expect(summary).toContainText('2024-02'); + await expectNoRawPipe(summary); + await expectHealthyHarness(page); + }); + } +}); diff --git a/tests/e2e/responsive.spec.js b/tests/e2e/responsive.spec.js new file mode 100644 index 0000000..57f7684 --- /dev/null +++ b/tests/e2e/responsive.spec.js @@ -0,0 +1,161 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + goNext, + openParticipant, + selectLabeledResponse, +} from './support/harness.js'; + +const RESPONSIVE_PROJECTS = new Set([ + 'chromium-desktop', + 'chromium-phone', + 'chromium-tablet', +]); + +async function expectMobileResponseLabel(label, cell, { + backgroundColor, + text, + textColor, +}) { + await expect(label).toHaveText(text); + await expect(label).toBeVisible(); + await expect(label).toHaveCSS('display', 'flex'); + await expect(label).toHaveCSS('visibility', 'visible'); + await expect(label).toHaveCSS('opacity', '1'); + await expect(label).toHaveCSS('color', textColor); + await expect(label).toHaveCSS('-webkit-text-fill-color', textColor); + await expect(label).toHaveCSS('background-color', backgroundColor); + + const [labelBox, cellBox] = await Promise.all([ + label.boundingBox(), + cell.boundingBox(), + ]); + expect(labelBox).not.toBeNull(); + expect(cellBox).not.toBeNull(); + expect(labelBox.width / cellBox.width).toBeGreaterThan(0.95); + expect(labelBox.height / cellBox.height).toBeGreaterThan(0.95); +} + +test.describe('participant responsive layout @responsive @canonical', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + !RESPONSIVE_PROJECTS.has(testInfo.project.name), + 'Responsive assertions run at the canonical Chromium breakpoints.', + ); + }); + + test('preserves DOM tab order while changing the visual action order', async ({ page }, testInfo) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + + const question = activeQuestion(page, 'DETAIL'); + const next = await question.locator('button.next').boundingBox(); + const reset = await question.locator('button.reset').boundingBox(); + const back = await question.locator('button.previous').boundingBox(); + expect(next).not.toBeNull(); + expect(reset).not.toBeNull(); + expect(back).not.toBeNull(); + + if (testInfo.project.name === 'chromium-phone') { + expect(next.y).toBeLessThan(reset.y); + expect(reset.y).toBeLessThan(back.y); + } else { + expect(back.x).toBeLessThan(reset.x); + expect(reset.x).toBeLessThan(next.x); + expect(Math.abs(back.y - next.y)).toBeLessThan(2); + } + + const domOrder = await question.locator('button').evaluateAll((buttons) => ( + buttons.map((button) => button.dataset.clickType) + )); + expect(domOrder).toEqual(['next', 'reset', 'previous']); + await expectHealthyHarness(page); + }); + + test('switches the response grid between table and stacked-card layouts', async ({ page }, testInfo) => { + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await goNext(page); + + const question = activeQuestion(page, 'GRID_RATE'); + const table = question.locator('table.quest-grid'); + await expect(table).toBeVisible(); + + if (testInfo.project.name === 'chromium-phone') { + await expect(table.locator('thead')).toHaveCSS('display', 'none'); + await expect(table.locator('td.response').first()).toHaveCSS('display', 'block'); + await expect(table.locator('td.response').first()).toHaveAttribute('data-header', /^\s*Never$/); + } else { + await expect(table).toHaveCSS('display', 'inline-table'); + await expect(table.locator('tr').first()).toHaveCSS('display', 'table-row'); + } + + await question.locator('tr[data-question-id="GRID_WALK"] label', { hasText: 'Sometimes' }).click(); + await expect(question.locator('#GRID_WALK_1')).toBeChecked(); + await expectHealthyHarness(page); + }); + + test('keeps phone grid response names visible before and after selection', async ({ page }, testInfo) => { + test.skip( + testInfo.project.name !== 'chromium-phone', + 'Mobile cards are the only layout where response labels supply the visible column names.', + ); + + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await goNext(page); + + const row = activeQuestion(page, 'GRID_RATE').locator('tr[data-question-id="GRID_WALK"]'); + const expectedLabels = ['Never', 'Sometimes', 'Often']; + + for (const [index, text] of expectedLabels.entries()) { + const cell = row.locator('td.response').nth(index); + await expectMobileResponseLabel(cell.locator('label.custom-label'), cell, { + backgroundColor: 'rgb(240, 240, 240)', + text, + textColor: 'rgb(51, 51, 51)', + }); + } + + const selectedCell = row.locator('td.response').nth(1); + await selectedCell.locator('label.custom-label').click(); + await expect(row.locator('#GRID_WALK_1')).toBeChecked(); + await expectMobileResponseLabel(selectedCell.locator('label.custom-label'), selectedCell, { + backgroundColor: 'rgb(50, 122, 187)', + text: 'Sometimes', + textColor: 'rgb(255, 255, 255)', + }); + await expectHealthyHarness(page); + }); + + test('keeps representative responsive grid geometry stable @visual', async ({ page }, testInfo) => { + testInfo.snapshotSuffix = ''; + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await goNext(page); + const question = activeQuestion(page, 'GRID_RATE'); + await question.locator('tr[data-question-id="GRID_WALK"] label', { hasText: 'Sometimes' }).click(); + await page.mouse.move(0, 0); + // Keep this cross-platform snapshot focused on geometry and selected-state + // fills. The phone-specific test above separately protects visible label + // text and its exact unselected/selected colors. + await page.addStyleTag({ + content: ` + #questionnaireRoot, + #questionnaireRoot * { + -webkit-text-fill-color: transparent !important; + text-shadow: none !important; + } + `, + }); + + await expect(question).toHaveScreenshot( + `participant-grid-${testInfo.project.name}.png`, + { + animations: 'disabled', + caret: 'hide', + maxDiffPixelRatio: 0.02, + scale: 'css', + }, + ); + }); +}); diff --git a/tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-desktop-chromium-desktop.png b/tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-desktop-chromium-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a6da1f188d6a0267dbb5379a9aa26ff064f68f GIT binary patch literal 9373 zcmeHtXH=8iMq&Mjur1wOm*9b^2 zQF;%dhlJ$pjPt+iuKWG0b?#c{TM{7euk8J_jsJ5c8Tu1fPSDWM(96j_eMv)ez--qJ{(L#K z?e5Itf~Me6^#~k>xQQx^Pa5i+KJco?;*=BVnS_mLXdYfE7o?%N%J`OvhUVP4szWqa zul?`K|2>EQ(M9lP$)G))({ZkAvOT1v}ckv;<6?P8G#bzyJU)zNYsinun_94M4~ z?k&^arOml+K3?8YJM@7hVJ4z)tf+RaW*BAOn@U$vBs;u2>1mgzUT{Ukmbvqfa?3=I zrJR!&Z?;tgYUq1Aw|%%q*cWJJcHH~vXZBpqv@6Db%Ab3%P}eird&ic`c zF59}XfJ0JXxCMg#7vq47(}pMn;nsSLb){5RS_Lw&Z=_=@UEjFYX3>MI`k(o%?MiYIZk66-Q% zqoM0OP~*HTnEU2F&-$eZw2OXv)D% zgfe-52+g{zEU~RB9huTdZ`~4Wmc-cU*dxY$-z$FNn#Zk)8fUnTfE2`j2*Gwf(REUe zJ5jafBx{(≻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 literal 0 HcmV?d00001 diff --git a/tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-phone-chromium-phone.png b/tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-phone-chromium-phone.png new file mode 100644 index 0000000000000000000000000000000000000000..c6cd130966e03412c4d6d6b3e82ee6ec3a416279 GIT binary patch literal 8156 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 V#imJlfiq$@C(oV0e*Mj@KLJJ`_No8? literal 0 HcmV?d00001 diff --git a/tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-tablet-chromium-tablet.png b/tests/e2e/responsive.spec.js-snapshots/participant-grid-chromium-tablet-chromium-tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d93b4628b12529d18f4e98a198b7c1cf1ad19d GIT binary patch literal 7044 zcmeHMc{r4B+n$mXAzMQ7OGOmw7s;N4vdfw^Nn+B}Xc|jqNGMB+>>68^!BBPvqbRZ_ zTbLO;!!WiO%rM`r_x!JHF$1|GnpV?zyk~x~}s)uk(3jW}?r{Dar|fK)7#Q zzjhM>+4~Lx*&}jbFIdTeN-jYlhaoqvXfR_z1Q-<-^PL$ z`1hIfrFAu85J%X;XCQr>$H~Q7ovQ9>0To578vbY$VQ~>+)%jj+1{^|7Rs{lS5d0zr zfw&%kK_HPQYWG0Shc4}hG#vf+;=eEC|DqVANPbk@NxjI+{_79MqAEvF4FAQtnTE6v zxw%^Fzg!@jLrCl`qVm-9D zuEG)jbmCjoaG8h2n7d7}6Div;K`%-aXZvZqA&Bk9jT<~WVq@H~n#`rfYVVo)^&x18 zvbtKe^~XNBiAu9bt8xjXY}^k z=U@);jigrs(oYwL5Y&DgVS53lhL}@C?=V5H5mr0ZFyi~UMW0NzybU|(LYUAWP zMI+(GnU%6UxBE{rPH3p#K-3hV>JA0>_d6P^UVh?cBy-BP9>;m zMY}e?_N56Yb$yn&->Kp8^OTY<*ePyw^tM;h1=nxlNMc5po~^CzNPU1e99~jVl4F#V zxwJDDCUGp4_ae+z$!BTQuH2JbLbLYzDzV(NFP~aW&{R~kyr`vQ(wDE{yYiu;cKMqa zCLqV;ef}*w6slh8C9md2y8N*rXB_F>J3%CeG1n9JZob}?)B6py6K<2NiyQ_^-IyE8 zH8*Fbre^D9GX)3y#RLTf1q1{nBo=8|HR|Ag!MUw;f6o^b*Kc(wj}Uz(qVivh;xIhm z9{m~g#o{Q>qSqo9^+<59+8K<0Z-BYClc@^(Ss7J3k!Tt3>GtlU<}A~IqdBH&D01|% z+7FZc&-{kUJRZW;*wfx1M*?ibls+078TE!~i#hv@g@9e@lx`h5Yol3fE^FK&{fdZ) z$Xp$30fz3GEfg*H=(#u58fTJzveqR|{Q%YzX7wXLnW-2vv+TT7vD}-QB9g2$dgqszW!2GOeAOUyGA^2g{)e))SH^PYzeY zitRZxZ#rMIx$B5V)A1v9+v~%kLP{P#uWj=yU0s`}bZ1E$C8lS0RFeIuzh`^u{MLp( zx&&81OS0MDmO}?*9}6XA=|$Cyg^ImPRv<7}I3%8p7P&yLj%4U?h?|-F4LBmPg*6Dy zFZQg=*Vs%ob}w(_oOQhG!;yMN9E$x_zcYfdF%b>z`=;$ND@g6hHH{Kg;)M0;DE(A^ zNIZJ{coFiK%u&?>qiBuwL|VaN)hq?ebRyBA?|RlIw5a+Xxz<;;9HDo%`+cC^@Uc*j z&N83najorHQ`Jvg%3bA|IcGOY+}ae&24)?xH%}XHJUMan(t}?x)M^Tv#TXIIJv$or zqo%*uzS87m;H}bo9xB$wR>3w25Vz_fKfhm@x?JM9OGG}h1`B5;yd$R)X^BDUTt6bkOp1juX7NFDw&sci)VsHv5^hqw|QK! zg58p{ujpOB*O4saEYv6K+>xxb=3+)K-(clFX?~)1p*1B1R(~rjDm?sWL$@~ejK!K1 zl>2{H*B*kSb1xpx~f4f-%-CHV(sK#3rSQ{5$ z3T%p>O5_{SGON_|2M&=*=tU*#yMxezH3oD2N1$}eQHQzfu zG$=GclrKLdJtU4=gzwbG=5f|^w6~wzd8cM$tzzU43 z+$%c9J=}Y6fayW`k>QzvwX-Z>1Aamw~C!K5Fgh%k>?&Q*3mutvnxvR@z}u%clW8vnGFB!wI6qD zTHXRI5@f^htFdco*si>&>TT|Izv6gnJFV{$x;${GB3g4Rk8Q*XdsCMb(WS{S3Vy&{ zuQ9y#s3*tRPPLmym~$~Eg0{Jo*E4MiDfDerp9wiB`Lu~0CrlP_| zL4c1dp)J{%ivEl`^%8?ZRUT2r7F_bm6$@Xa^^D-Dpb0#exCM9cjaVs=7k{QFMRfdy+##S#gMLUt(_uJbz7Q4pkhL6*rV!6%P=pSTMO_)a)TP0T5b~i_&%C49?YGc( zv{;p~$nn7-2#Glhw8l4Y4o`*G;FI4~dh|>K0=6%^&o^>iRyf?#I9F8pVPQe({u_Q> zN;B46svx@**p3;cellQ;t1mi-ugq`5u zPn&2<>#_2NR_5ySxhLvBoNMmQy=u6&I^6*sEOATI47lU!3L?|xa7$nQMAnJIt)cR* zisWmoZ2>M!#ec`WWH<`EPpl-u+vW#L^`nnFUhU@c=H*}NSWQo3*a+<<96{VcZ;XYt zDG(fN9>LaGfc!gCReI93**K=;l$CAj-n@MI@=F9!9(Vul-MbW-T+5pl7CJgQ5$C*9 zFF(Gz$84@VdiD54EiGs7hjOXVvYGT$%7-2?|87`3MIaOI1K+A;&%ggiW@mWuKmsqk zP=-Lh9VSB{M|FJIAh!>VasQVVowl*p8futKW_x@4L~}G1wJ=l;j>ERowQYUa@=~BV zk$*{An{TwFw3JRGr6ecMVVFbXPCQ>48?!PqH-_7vnh!$s9xH?|>HTGBV4(VF^a^8r z0os>uH7VoBRRLh4>hVO5af<54(ANFu!>Qa~#P&des>n4>dk7vn$e1Tqmjd|!#24~* zSZ>L!YG1BP3#_e%@qiXK0kg4i*wsQSfU7bWIRx>T+1hHaJSYX(5uOyuUwZ+Tz#s4(a0=TxL9 zCqQ1ker`jw!=)?lXJLkxI?QFET)8;YRzb43+SB&dR)g!; zA4$mHD!IlxP7P8y2hMws&khOC@OXzFh|mpNhA(WS4|K8ru3`H0GFVB3>8ZjM~hmL7U3_ z=`^fGE{eI_Oe3BtihNsjl`Nepin4JPtWDzns-;k{|fkK zdv(Pd+;!Q487+w!gVcPRLSJ6jvFztGv3HJJbD!Q?U%)?}&?CKyj$R~IuX7L@G7!~?b5m3ToXSPF+e8K zo%uD+#;F=QPz0cY41m(t*EiV;HdvC~!gu7HZMsOc)F7z_adxFQRmEHJFA9)zMn;kF ztwl5opEC`}w#X8D6A+DlIxE;; z7P>bVSKO+)S`Wlo*~2>T851|pE{sO`)N~5W`lO?mms_>PNBMf!W}a-=qen}I3UyBa z5lHHr!KoEab$(xYi)?1CV_~GZkS&|vrd0%&TtnO&c{BvVCAaGZB*^mwa?ZxwE|zz2 zqV2b}?B}gi{blzHwNO6rga8s-vp~YrXVTC`h=S@h((T(4C=*H zTLQ1h-;?zW+F1S@QdR(0N6r?5V4etv!+&}onviyF7{^2NE>f{>+EH(fHkh|(DIY|uN5Es`WU%bB1Hs$CI0D2Jo8JI6)&`muDV5ym#y)m6ZZw3Q&G9aR?j1@D#+ry zDVOL)s!{s;?-(ry7rr>|+kyjPFO>JD9{C9_I5s&spDT#*wReJDQc^NAGt-v4JYpB~ z{mow}%kB&4B*l)%Y`nTTCe{)Zw7YJ<_m4ZYp>p!eTfU*8w zGoS{L%jx-2;3wo;6@2ZJTLZDM?Ud_eCxfQf0>#1J}bO$i*zOjsNt zpg~y}#-Ho9Se@w_u)F@~(ML9iK+Ray%0AmwIBRQ-3Z;k~KTc~P{Lv5rH~W+5Kq>%- z<3nh*dmF%6jL-N%w^g7Zzzm%$XU8R>`K*do%b?-GtlQew*7FhzoEb2YV{Bw%lwst; zkk#dhX8OV~9k90OJ_m3bKz;pYR|NdBQM)H!qvnb~xx!Hu2n0`WZ|}G>LPq=k{XA>* z#!60F)^1|A@(ZiWsm&1ix(}@l$-Ty4jSd|z_EdpnJz?_7M6_1^p_;5E3Bih(M+&dc;We z&uHWv=|DN?~ND_zEUdbP$Ej|w%$^2(9V{(ONr~ zm6Zodr*{3Usd)R;=jnC8iXemF+}h$vhylkFCr%hAE1F*f@_(S#uJL!S|xpPgate@**It4DIpE3YWNgmk-!S#I8FgY zU3#yh%x!7(b8-Y!#Gcz5=LEH0=+Np0{0^kieHo1tCtS9E&+?c_a(^R{qfHf23c3S4 zgj0Wty%-d`i;Ih0RA*FP-I6yZG+8=t4kP#Qp6er0VmZ8SL$nQY#c6!=2rLu z>x9KZoBiM&z!yr*eD4>Z(SY!n28KJ3Ox z5rJ?6S`mhD7T*9P+1BrOLk-Y_Q2A3S?gyi>a z(Dnda9?k#yq#JHt`Oq;fr}ORGx5*{Yt(_(TQ_5@ARi=x`yK}O#o`6=!iv$GKx~?f` zCS9Cb?Y%b-Ga^?qA#|VGzl0b?~OS{!L@nTlvGO-1jY-i2k6FJS&_*Y^YKwA|euB zQ*VJfqr6lwF<)f%Os=vLOvw;t6Kf9y!eZ@&J`e$)vG(r@XEq4y1cz%Y|BM${f!xqF LxmI-b_VfP$mo}UP literal 0 HcmV?d00001 diff --git a/tests/e2e/storageConcurrency.spec.js b/tests/e2e/storageConcurrency.spec.js new file mode 100644 index 0000000..b49336a --- /dev/null +++ b/tests/e2e/storageConcurrency.spec.js @@ -0,0 +1,65 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + expectHealthyHarness, + flushHarness, + goNext, + harnessSnapshot, + openParticipant, + selectLabeledResponse, +} from './support/harness.js'; + +test.describe('non-blocking host-store ordering @core @canonical', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(testInfo.project.name !== 'chromium-desktop', 'The overlapping host-write contract runs once in Chromium.'); + }); + + test('keeps navigation and per-question deltas stable when successful writes settle out of order', async ({ page }) => { + await openParticipant(page, { + fixture: 'navigationState.txt', + storeOutcomes: [ + { kind: 'resolve', delayMs: 1_000, value: { code: 200 } }, + { kind: 'resolve', delayMs: 10, value: { code: 200 } }, + ], + }); + + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + await expect(activeQuestion(page, 'DETAIL')).toBeVisible(); + + const detail = activeQuestion(page, 'DETAIL').locator('#detail'); + await detail.fill('Concurrent host write'); + await detail.blur(); + await goNext(page); + await expect(activeQuestion(page, 'SUMMARY')).toBeVisible(); + + await expect.poll(async () => ( + (await harnessSnapshot(page)).logs.storeCalls.map(({ status }) => status) + )).toEqual(['pending', 'fulfilled']); + const whilePending = await harnessSnapshot(page); + expect(whilePending.logs.storeCalls).toHaveLength(2); + expect(whilePending.logs.storeCalls[0]).toMatchObject({ status: 'pending', settlementIndex: null }); + expect(whilePending.logs.storeCalls[1]).toMatchObject({ status: 'fulfilled', settlementIndex: 1 }); + expect(whilePending.state.survey).toMatchObject({ + PATH: '1', + DETAIL: 'Concurrent host write', + }); + + await flushHarness(page); + await expect(activeQuestion(page, 'SUMMARY')).toBeVisible(); + const settled = await expectHealthyHarness(page); + expect(settled.state.survey).toMatchObject({ + PATH: '1', + DETAIL: 'Concurrent host write', + }); + expect(settled.logs.storeCalls[0].changes).toMatchObject({ 'TEST_NAV.PATH': '1' }); + expect(settled.logs.storeCalls[1].changes).toMatchObject({ 'TEST_NAV.DETAIL': 'Concurrent host write' }); + expect(settled.logs.storeCalls.map(({ status, settlementIndex }) => ({ status, settlementIndex }))).toEqual([ + { status: 'fulfilled', settlementIndex: 2 }, + { status: 'fulfilled', settlementIndex: 1 }, + ]); + expect(settled.logs.storeCalls[0].changes).not.toHaveProperty('TEST_NAV.DETAIL'); + expect(settled.logs.storeCalls[1].changes).not.toHaveProperty('TEST_NAV.PATH'); + await expect(page.locator('#storeErrorModal')).not.toHaveClass(/show/); + }); +}); diff --git a/tests/e2e/support/authoring.js b/tests/e2e/support/authoring.js new file mode 100644 index 0000000..8c888a9 --- /dev/null +++ b/tests/e2e/support/authoring.js @@ -0,0 +1,254 @@ +import { readFileSync } from 'node:fs'; +import { createHash } from 'node:crypto'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { expect } from './test.js'; + +const supportDirectory = dirname(fileURLToPath(import.meta.url)); +const repositoryRoot = join(supportDirectory, '..', '..', '..'); + +const paths = { + index: join(repositoryRoot, 'index.html'), + bootstrapCss: join(repositoryRoot, 'node_modules', 'bootstrap-authoring', 'dist', 'css', 'bootstrap.min.css'), + bootstrapJs: join(repositoryRoot, 'node_modules', 'bootstrap-authoring', 'dist', 'js', 'bootstrap.bundle.min.js'), + fontAwesomeCss: join(repositoryRoot, 'node_modules', '@fortawesome', 'fontawesome-free', 'css', 'fontawesome.min.css'), + localForageJs: join(repositoryRoot, 'node_modules', 'localforage', 'dist', 'localforage.min.js'), + fontLock: join(repositoryRoot, 'tests', 'e2e', 'assets', 'fonts.lock.json'), +}; + +const fontLock = JSON.parse(readFileSync(paths.fontLock, 'utf8')); +const libreBaskerville = fontLock.assets.find((asset) => asset.family === 'Libre Baskerville'); +if (!libreBaskerville) { + throw new Error('The authoring asset lock is missing Libre Baskerville.'); +} + +const libreBaskervillePath = join(repositoryRoot, 'tests', 'e2e', 'assets', ...libreBaskerville.path.split('/')); +const libreBaskervilleBytes = readFileSync(libreBaskervillePath); +const libreBaskervilleDigest = createHash('sha256').update(libreBaskervilleBytes).digest('hex'); +if (libreBaskervilleBytes.byteLength !== libreBaskerville.bytes + || libreBaskervilleDigest !== libreBaskerville.sha256) { + throw new Error('The pinned Libre Baskerville authoring asset failed its integrity check.'); +} + +const libreBaskervilleLicensePath = join( + repositoryRoot, + 'tests', + 'e2e', + 'assets', + ...libreBaskerville.licensePath.split('/'), +); +const libreBaskervilleLicenseDigest = createHash('sha256') + .update(readFileSync(libreBaskervilleLicensePath)) + .digest('hex'); +if (libreBaskervilleLicenseDigest !== libreBaskerville.licenseSha256) { + throw new Error('The pinned Libre Baskerville license failed its integrity check.'); +} + +export const LIBRE_BASKERVILLE_STYLESHEET_URL = libreBaskerville.stylesheetUrl; +export const LIBRE_BASKERVILLE_FONT_URL = libreBaskerville.url; +export const AUTHORING_BOOTSTRAP_CSS_URL = 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css'; +export const AUTHORING_BOOTSTRAP_JS_URL = 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js'; + +const LIBRE_BASKERVILLE_CSS = ` + @font-face { + font-family: 'Libre Baskerville'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('${LIBRE_BASKERVILLE_FONT_URL}') format('truetype'); + } +`; + +const AUTHORING_EXTERNAL_ASSETS = [ + { + url: AUTHORING_BOOTSTRAP_CSS_URL, + path: paths.bootstrapCss, + contentType: 'text/css', + }, + { + url: AUTHORING_BOOTSTRAP_JS_URL, + path: paths.bootstrapJs, + contentType: 'application/javascript', + }, + { + url: 'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/css/fontawesome.min.css', + path: paths.fontAwesomeCss, + contentType: 'text/css', + }, + { + url: 'https://cdnjs.cloudflare.com/ajax/libs/localforage/1.10.0/localforage.min.js', + path: paths.localForageJs, + contentType: 'application/javascript', + }, +]; + +export const DEMO_MODULE_URL = 'https://raw.githubusercontent.com/episphere/quest/main/questionnaires/demo.txt'; +export const TEST_MODULE_URL = 'https://questionnaire.test/canonical.txt'; +export const HTTP_ERROR_MODULE_URL = 'https://questionnaire.test/not-found.txt'; +export const REJECTED_MODULE_URL = 'https://questionnaire.test/rejected.txt'; +export const GITHUB_BLOB_MODULE_URL = 'https://github.com/episphere/questionnaire/blob/locked/prod/canonical.txt'; +export const GITHUB_WEB_RAW_MODULE_URL = 'https://github.com/episphere/questionnaire/raw/locked/prod/canonical.txt'; +export const GITHUB_RAW_MODULE_URL = 'https://raw.githubusercontent.com/episphere/questionnaire/locked/prod/canonical.txt'; + +const LOCALFORAGE_FALLBACK_SCRIPT = ` + window.localforage = { + createInstance() { + throw new Error('Synthetic LocalForage initialization failure'); + }, + clear() { + return Promise.resolve(); + } + }; +`; + +function normalizeModuleResponse(response) { + if (typeof response === 'string') { + return { status: 200, body: response, contentType: 'text/plain' }; + } + + return { + status: response.status ?? 200, + body: response.body ?? '', + contentType: response.contentType ?? 'text/plain', + abort: response.abort, + }; +} + +export async function installAuthoringRoutes(page, diagnostics, { + demoMarkdown = '', + localForageMode = 'normal', + modules = {}, +} = {}) { + // Preserve the checked-in page's SRI and crossorigin declarations. The + // intercepted authoring assets are byte-identical to its pinned versions; + // the participant harness separately uses Connect-shaped Bootstrap 5.3.3. + const importMap = ` + + `; + const readinessProbe = ` + + `; + const localIndex = readFileSync(paths.index, 'utf8') + .replace('', `${importMap}${readinessProbe}`); + + await page.route('**/index.html*', async (route) => { + await route.fulfill({ + status: 200, + contentType: 'text/html', + body: localIndex, + }); + }); + + for (const asset of AUTHORING_EXTERNAL_ASSETS) { + await page.route(asset.url, async (route) => { + diagnostics.fulfilledExternalRequests.push(asset.url); + + if (asset.url.includes('localforage') && localForageMode === 'initialization-failure') { + await route.fulfill({ + status: 200, + contentType: 'application/javascript', + body: LOCALFORAGE_FALLBACK_SCRIPT, + }); + return; + } + + await route.fulfill({ + status: 200, + contentType: asset.contentType, + headers: { 'access-control-allow-origin': '*' }, + path: asset.path, + }); + }); + } + + await page.route('https://fonts.googleapis.com/**', async (route) => { + diagnostics.fulfilledExternalRequests.push(route.request().url()); + await route.fulfill({ + status: 200, + contentType: 'text/css', + body: LIBRE_BASKERVILLE_CSS, + }); + }); + + await page.route(LIBRE_BASKERVILLE_FONT_URL, async (route) => { + diagnostics.fulfilledExternalRequests.push(route.request().url()); + await route.fulfill({ + status: 200, + contentType: libreBaskerville.mimeType, + path: libreBaskervillePath, + }); + }); + + await page.route(DEMO_MODULE_URL, async (route) => { + diagnostics.fulfilledExternalRequests.push(DEMO_MODULE_URL); + await route.fulfill({ status: 200, contentType: 'text/plain', body: demoMarkdown }); + }); + + for (const [url, moduleResponse] of Object.entries(modules)) { + const response = normalizeModuleResponse(moduleResponse); + await page.route(url, async (route) => { + diagnostics.fulfilledExternalRequests.push(url); + if (response.abort) { + await route.abort(response.abort); + return; + } + + await route.fulfill({ + status: response.status, + contentType: response.contentType, + body: response.body, + }); + }); + } +} + +export async function waitForAuthoringReady(page) { + await page.waitForLoadState('load'); + await page.waitForFunction(() => { + const textarea = document.getElementById('markupTextArea'); + return Boolean( + window.localforage + && window.__questAuthoringReady === true + && textarea + && !textarea.disabled, + ); + }); + await page.evaluate(() => new Promise((resolve) => { + requestAnimationFrame(() => requestAnimationFrame(resolve)); + })); +} + +export async function renderAuthoringMarkdown(page, markdown) { + const textarea = page.locator('#markupTextArea'); + await textarea.fill(markdown); + await textarea.dispatchEvent('keyup', { key: 'a' }); + await page.waitForFunction(() => document.querySelectorAll('#rendering form.question').length > 0); +} + +export async function openAuthoringSettings(page) { + await page.getByRole('link', { name: 'Settings' }).click(); + await expect(page.locator('#settings')).toHaveClass(/show/); +} + +export async function closeAuthoringSettings(page) { + await page.locator('#settings').getByRole('button', { name: 'Close' }).click(); + await expect(page.locator('#settings')).not.toHaveClass(/show/); +} diff --git a/tests/e2e/support/axe.js b/tests/e2e/support/axe.js new file mode 100644 index 0000000..25271e2 --- /dev/null +++ b/tests/e2e/support/axe.js @@ -0,0 +1,37 @@ +import AxeBuilder from '@axe-core/playwright'; + +function normalizeTarget(target) { + return Array.isArray(target) ? target.map(String) : [String(target)]; +} + +function findingKey({ id, impact, target }) { + return JSON.stringify([id, impact, normalizeTarget(target)]); +} + +export async function analyzeQuestAxe(page) { + const results = await new AxeBuilder({ page }) + .include('#questionnaireRoot') + .analyze(); + + return results.violations.flatMap((violation) => ( + violation.nodes.map((node) => ({ + id: violation.id, + impact: violation.impact, + target: normalizeTarget(node.target), + })) + )); +} + +export function matchesAxeDefect(finding, defect) { + return defect.targets.some((target) => findingKey(finding) === findingKey({ + id: defect.ruleId, + impact: defect.impact, + target, + })); +} + +export function unwaivedAxeFindings(findings, acceptedDefects) { + return findings.filter((finding) => ( + !acceptedDefects.some((defect) => matchesAxeDefect(finding, defect)) + )); +} diff --git a/tests/e2e/support/corpus.js b/tests/e2e/support/corpus.js new file mode 100644 index 0000000..9120ec6 --- /dev/null +++ b/tests/e2e/support/corpus.js @@ -0,0 +1,47 @@ +import { readFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const supportDirectory = dirname(fileURLToPath(import.meta.url)); +export const repositoryRoot = join(supportDirectory, '..', '..', '..'); +export const corpusLock = JSON.parse(readFileSync(join(repositoryRoot, 'tests', 'corpus', 'lock.json'), 'utf8')); + +export function findLockedCorpusRecord(module, locale = 'en') { + const record = corpusLock.files.find((file) => file.module === module && file.locale === locale); + if (!record) throw new Error(`Missing locked ${module} ${locale} corpus entry`); + return record; +} + +export function lockedCorpusPath(record) { + return join(repositoryRoot, corpusLock.cacheRoot, corpusLock.commit, record.path); +} + +export function readLockedMarkdown(module, locale = 'en') { + return readFileSync(lockedCorpusPath(findLockedCorpusRecord(module, locale)), 'utf8'); +} + +export function treeAt(questionId, previousQuestionId) { + const currentNode = { value: questionId, children: [] }; + const firstNode = previousQuestionId + ? { value: previousQuestionId, children: [currentNode] } + : currentNode; + return JSON.stringify({ rootNode: { value: null, children: [firstNode] }, currentNode: questionId }); +} + +export function treeAtPath(questionIds) { + const [first, ...rest] = questionIds; + const rootNode = { value: null, children: [{ value: first, children: [] }] }; + let node = rootNode.children[0]; + for (const questionId of rest) { + const child = { value: questionId, children: [] }; + node.children.push(child); + node = child; + } + return JSON.stringify({ rootNode, currentNode: questionIds.at(-1) }); +} + +export async function rerenderParticipant(page, config) { + await page.reload(); + await page.waitForFunction(() => window.questHarness?.ready === true); + return page.evaluate((nextConfig) => window.questHarness.render(nextConfig), config); +} diff --git a/tests/e2e/support/gridDeepCoverageFixtures.js b/tests/e2e/support/gridDeepCoverageFixtures.js new file mode 100644 index 0000000..dc4af4a --- /dev/null +++ b/tests/e2e/support/gridDeepCoverageFixtures.js @@ -0,0 +1,41 @@ +// Production grid from locked questionnaire/module2.txt at +// 7ae99a22af325cf0e14be047a7636462db9bfd50. Retaining the source IDs and +// response values exercises the high-cardinality storage shape. +export const productionSleepGridMarkdown = ` +{"name":"TEST_PRODUCTION_GRID"} +[GRID_LEAD] The next question uses a production response grid. +|grid?|id="D_981441822"|What is the chance that you would doze off or fall asleep (not just "feel tired") in each of these situations? If you are never or rarely in the situation, please make your best guess for what would happen.|[ +[D_403155173] Sitting and reading; +[D_576621769] Watching television; +[D_988508028] Sitting inactive in public place (such as a theater or a meeting); [D_186488870] Riding as a passenger in a car for an hour without stopping; +[D_922388461] Lying down to rest in the afternoon; +[D_760686611] Sitting and talking to someone; +[D_354550061] Sitting quietly after a lunch that did not include alcohol; +[D_179705366] In a car, while you are stopped for a few minutes in traffic; +[D_955609858] At the dinner table;]| +(514068832:No chance) +(774439579:Slight Chance) +(747099514:Moderate Chance) +(977681388: High Chance)| +[GRID_FOLLOWUP] The saved grid answer can now be revisited. +[END,end] Done. +`; + +export const productionSleepGridRows = Object.freeze({ + D_403155173: '774439579', + D_576621769: '747099514', + D_988508028: '977681388', + D_186488870: '514068832', + D_922388461: '774439579', + D_760686611: '747099514', + D_354550061: '977681388', + D_179705366: '514068832', + D_955609858: '774439579', +}); + +export async function selectProductionSleepGridRows(grid, expectedRows) { + for (const [rowId, selectedValue] of Object.entries(expectedRows)) { + const response = grid.locator(`input[name="${rowId}"][value="${selectedValue}"]`); + await response.locator('xpath=following-sibling::label').click(); + } +} diff --git a/tests/e2e/support/harness.js b/tests/e2e/support/harness.js new file mode 100644 index 0000000..aba651f --- /dev/null +++ b/tests/e2e/support/harness.js @@ -0,0 +1,71 @@ +import { readFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { expect } from './test.js'; + +const supportDirectory = dirname(fileURLToPath(import.meta.url)); +const repositoryRoot = join(supportDirectory, '..', '..', '..'); +const canonicalDirectory = join(repositoryRoot, 'tests', 'fixtures', 'canonical'); + +export function readCanonicalFixture(name) { + return readFileSync(join(canonicalDirectory, name), 'utf8'); +} + +export async function openParticipant(page, { + fixture = 'runtimeControls.txt', + markdown, + ...config +} = {}) { + await page.goto('/tests/harness/participant.html'); + await page.waitForFunction(() => window.questHarness?.ready === true); + + const renderResult = await page.evaluate((renderConfig) => { + return window.questHarness.render(renderConfig); + }, { + ...config, + markdown: markdown ?? readCanonicalFixture(fixture), + }); + + expect(renderResult.result, 'transform.render should report a successful participant render').toBe(true); + expect(renderResult.activeQuestionId, 'participant render should activate a question').toBeTruthy(); + + return renderResult; +} + +export async function harnessSnapshot(page) { + return page.evaluate(() => window.questHarness.snapshot()); +} + +export async function flushHarness(page) { + await page.evaluate(() => window.questHarness.flush()); +} + +export async function waitInHarness(page, milliseconds) { + await page.evaluate((delay) => window.questHarness.wait(delay), milliseconds); +} + +export function activeQuestion(page, questionId) { + const selector = questionId + ? `#questionnaireRoot form.question.active#${questionId}` + : '#questionnaireRoot form.question.active'; + return page.locator(selector); +} + +export async function goNext(page) { + await activeQuestion(page).getByRole('button', { name: 'Next question' }).click(); +} + +export async function goBack(page) { + await activeQuestion(page).getByRole('button', { name: 'Back to the previous question' }).click(); +} + +export async function selectLabeledResponse(page, label) { + await activeQuestion(page).locator('label', { hasText: label }).click(); +} + +export async function expectHealthyHarness(page, { allowErrors = false } = {}) { + await flushHarness(page); + const snapshot = await harnessSnapshot(page); + if (!allowErrors) expect(snapshot.logs.errors).toEqual([]); + return snapshot; +} diff --git a/tests/e2e/support/test.js b/tests/e2e/support/test.js new file mode 100644 index 0000000..1b913e3 --- /dev/null +++ b/tests/e2e/support/test.js @@ -0,0 +1,180 @@ +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { test as base, expect } from '@playwright/test'; + +const supportDirectory = dirname(fileURLToPath(import.meta.url)); +const repositoryRoot = join(supportDirectory, '..', '..', '..'); +const canonicalImageAsset = { + url: 'https://episphere.github.io/quest/images/FemaleBaldness1.png', + path: join(repositoryRoot, 'tests', 'e2e', 'assets', 'FemaleBaldness1.png'), +}; +const questRuntimeAssets = [ + { + url: 'https://episphere.github.io/quest-dev/ActiveLogic.css', + path: join(repositoryRoot, 'ActiveLogic.css'), + }, + { + url: 'https://episphere.github.io/quest-dev/Style1.css', + path: join(repositoryRoot, 'Style1.css'), + }, +]; +const versionedQuestRuntimeAsset = /^https:\/\/cdn\.jsdelivr\.net\/gh\/episphere\/quest@v[^/]+\/(ActiveLogic|Style1)\.css$/; +const FIREFOX_INSTALL_TRIGGER_DEPRECATION = /^\[JavaScript Warning: "InstallTrigger is deprecated and will be removed in the future\." \{file: "http:\/\/127\.0\.0\.1:\d+\/main\.js" line: 179\}\] \[source: http:\/\/127\.0\.0\.1:\d+\/main\.js\]$/; + +const testServerPort = process.env.QUEST_PLAYWRIGHT_PORT ?? '4173'; +const LOCAL_ORIGINS = new Set([ + `http://127.0.0.1:${testServerPort}`, + `http://localhost:${testServerPort}`, +]); + +function shouldUseLocalNetwork(urlString) { + const url = new URL(urlString); + return LOCAL_ORIGINS.has(url.origin) || ['about:', 'blob:', 'data:'].includes(url.protocol); +} + +/** + * Install the suite's offline policy on a Playwright Page. All + * route registration is awaited so the first navigation cannot race the + * policy. + */ +export async function installOfflineDiagnostics(page) { + const diagnostics = { + unexpectedRequests: [], + fulfilledExternalRequests: [], + pageErrors: [], + consoleErrors: [], + consoleWarnings: [], + acknowledgedBrowserWarnings: [], + }; + + page.on('pageerror', (error) => diagnostics.pageErrors.push(error.stack || error.message)); + page.on('console', (message) => { + if (message.type() === 'error') { + const source = message.location().url; + diagnostics.consoleErrors.push(source ? `${message.text()} [source: ${source}]` : message.text()); + } else if (message.type() === 'warning') { + const source = message.location().url; + const renderedMessage = source ? `${message.text()} [source: ${source}]` : message.text(); + + // Firefox emits this deprecation when Quest reads InstallTrigger + // for its existing browser branch. Keep the browser diagnostic + // visible in the record without masking unrelated warnings. + if (FIREFOX_INSTALL_TRIGGER_DEPRECATION.test(renderedMessage)) { + diagnostics.acknowledgedBrowserWarnings.push(renderedMessage); + } else { + diagnostics.consoleWarnings.push(renderedMessage); + } + } + }); + + await page.route('**/*', async (route) => { + if (shouldUseLocalNetwork(route.request().url())) { + await route.continue(); + return; + } + + diagnostics.unexpectedRequests.push(route.request().url()); + await route.abort('blockedbyclient'); + }); + + await page.route(canonicalImageAsset.url, async (route) => { + diagnostics.fulfilledExternalRequests.push(canonicalImageAsset.url); + await route.fulfill({ + status: 200, + contentType: 'image/png', + path: canonicalImageAsset.path, + }); + }); + + // A Connect render normally supplies prefetched Markdown and retains the + // questionnaire URL. Quest uses the nonempty URL as the signal to fetch + // its two runtime stylesheets. Fulfill that production branch with the + // exact checked-in CSS while keeping the browser deny-by-default. + for (const asset of questRuntimeAssets) { + await page.route(asset.url, async (route) => { + diagnostics.fulfilledExternalRequests.push(asset.url); + await route.fulfill({ + status: 200, + contentType: 'text/css', + path: asset.path, + }); + }); + } + + await page.route(versionedQuestRuntimeAsset, async (route) => { + const url = route.request().url(); + const fileName = new URL(url).pathname.split('/').at(-1); + diagnostics.fulfilledExternalRequests.push(url); + await route.fulfill({ + status: 200, + contentType: 'text/css', + path: join(repositoryRoot, fileName), + }); + }); + + return diagnostics; +} + +/** + * Every browser test receives a fresh Playwright page/context. + */ +export const test = base.extend({ + diagnostics: [async ({ page }, use) => { + const diagnostics = await installOfflineDiagnostics(page); + + await use(diagnostics); + + expect.soft(diagnostics.unexpectedRequests, 'browser attempted an unapproved external request').toEqual([]); + expect.soft(diagnostics.pageErrors, 'browser emitted an uncaught page error').toEqual([]); + expect.soft(diagnostics.consoleErrors, 'browser emitted an unexpected console error').toEqual([]); + expect.soft(diagnostics.consoleWarnings, 'browser emitted an unexpected console warning').toEqual([]); + }, { auto: true }], +}); + +export function expectAndClearConsoleErrors(diagnostics, expectedPatterns, { allowedPatterns = [] } = {}) { + const messages = diagnostics.consoleErrors.splice(0); + const acceptedPatterns = [...expectedPatterns, ...allowedPatterns]; + + for (const pattern of expectedPatterns) { + expect( + messages.some((message) => ( + pattern instanceof RegExp ? pattern.test(message) : message.includes(pattern) + )), + `expected a console error matching ${String(pattern)}; received ${JSON.stringify(messages)}`, + ).toBe(true); + } + + for (const message of messages) { + expect( + acceptedPatterns.some((pattern) => ( + pattern instanceof RegExp ? pattern.test(message) : message.includes(pattern) + )), + `unexpected console error while exercising a characterized failure: ${message}`, + ).toBe(true); + } +} + +export function expectAndClearConsoleWarnings(diagnostics, expectedPatterns, { allowedPatterns = [] } = {}) { + const messages = diagnostics.consoleWarnings.splice(0); + const acceptedPatterns = [...expectedPatterns, ...allowedPatterns]; + + for (const pattern of expectedPatterns) { + expect( + messages.some((message) => ( + pattern instanceof RegExp ? pattern.test(message) : message.includes(pattern) + )), + `expected a console warning matching ${String(pattern)}; received ${JSON.stringify(messages)}`, + ).toBe(true); + } + + for (const message of messages) { + expect( + acceptedPatterns.some((pattern) => ( + pattern instanceof RegExp ? pattern.test(message) : message.includes(pattern) + )), + `unexpected console warning while exercising a characterized warning: ${message}`, + ).toBe(true); + } +} + +export { expect }; diff --git a/tests/e2e/temporalInputPartitions.spec.js b/tests/e2e/temporalInputPartitions.spec.js new file mode 100644 index 0000000..f7cfc54 --- /dev/null +++ b/tests/e2e/temporalInputPartitions.spec.js @@ -0,0 +1,51 @@ +import { test, expect } from './support/test.js'; +import { activeQuestion, expectHealthyHarness, goNext, openParticipant } from './support/harness.js'; + +const STANDARD_DESKTOPS = new Set(['chromium-desktop', 'firefox-desktop', 'webkit-desktop']); + +const INPUTS = [ + { + id: 'DATE_DYNAMIC', type: 'date', + markup: '|date|id=DATE_DYNAMIC min=valueOrDefault(\'D_DATE_MIN\',\'2024-07-10\') max=valueOrDefault(\'D_DATE_MAX\',\'2024-07-20\')|', + values: [['', false], ['2024-07-10', true], ['2024-07-20', true], ['2024-07-09', false], ['2024-07-21', false]], + }, + { + id: 'MONTH_DYNAMIC', type: 'month', + markup: '|month|id=MONTH_DYNAMIC min=valueOrDefault(\'D_123456789_0_0\',\'2024-03\') max=valueOrDefault(\'D_987654321_0_0\',\'2024-09\')|', + values: [['', false], ['2024-03', true], ['2024-09', true], ['2024-02', false], ['2024-10', false]], + }, + { + id: 'TIME_STATIC', type: 'time', + markup: '|time|id=TIME_STATIC min=09:00 max=17:00|', + values: [['', false], ['09:00', true], ['17:00', true], ['08:59', false], ['17:01', false]], + }, + { + id: 'NUMBER_DYNAMIC', type: 'number', + markup: '|__|__|id=NUMBER_DYNAMIC min=_value(\'age\') max=sum(age,5)|', + values: [['', false], ['45', true], ['50', true], ['44', false], ['51', false]], + }, +]; + +function surveyFor(input) { + return `{"name":"TEST_${input.id}"}\n\n[${input.id}?] Enter a value.\n${input.markup}\n\n[END,end] Complete.`; +} + +test.describe('temporal and dynamic numeric validation @core @canonical', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip(!STANDARD_DESKTOPS.has(testInfo.project.name), 'Validation runs in the three desktop engines.'); + }); + + for (const input of INPUTS) { + test(`${input.type} accepts its valid boundary values and rejects its out-of-range values`, async ({ page }) => { + for (const [value, valid] of input.values) { + await openParticipant(page, { markdown: surveyFor(input), previousResults: { age: '45' } }); + const control = activeQuestion(page, input.id).locator(`#${input.id}`); + if (value) await control.fill(value); + await goNext(page); + if (valid) await expect(activeQuestion(page, 'END')).toBeVisible(); + else await expect(activeQuestion(page, input.id)).toBeVisible(); + await expectHealthyHarness(page); + } + }); + } +}); diff --git a/tests/e2e/visual.spec.js b/tests/e2e/visual.spec.js new file mode 100644 index 0000000..e2c714c --- /dev/null +++ b/tests/e2e/visual.spec.js @@ -0,0 +1,109 @@ +import { test, expect } from './support/test.js'; +import { + activeQuestion, + goNext, + openParticipant, + readCanonicalFixture, + selectLabeledResponse, + waitInHarness, +} from './support/harness.js'; +import { + installAuthoringRoutes, + renderAuthoringMarkdown, + waitForAuthoringReady, +} from './support/authoring.js'; + +async function stabilizeVisual(page, testInfo) { + testInfo.snapshotSuffix = ''; + await page.mouse.move(0, 0); + await page.addStyleTag({ + content: ` + #questionnaireRoot, + #questionnaireRoot *, + #tool, + #tool * { + -webkit-text-fill-color: transparent !important; + text-shadow: none !important; + } + `, + }); +} + +const screenshotOptions = { + animations: 'disabled', + caret: 'hide', + maxDiffPixelRatio: 0.01, + scale: 'css', +}; + +test.describe('stable participant styling @visual', () => { + test.beforeEach(async ({}, testInfo) => { + test.skip( + testInfo.project.name !== 'chromium-desktop', + 'The visual baseline is intentionally limited to locked desktop Chromium.', + ); + }); + + test('keeps the selected-response and action layout', async ({ page }, testInfo) => { + // Text is made transparent below so platform font rasterization is not compared. + await openParticipant(page); + await selectLabeledResponse(page, 'Blue'); + await stabilizeVisual(page, testInfo); + + await expect(activeQuestion(page, 'CHOICE')).toHaveScreenshot( + 'participant-choice-layout.png', + screenshotOptions, + ); + }); + + test('keeps validation and modal states visually reviewable', async ({ page }, testInfo) => { + await openParticipant(page, { fixture: 'validation.txt' }); + await activeQuestion(page, 'BOUNDED').locator('#bounded').fill('9'); + await goNext(page); + await expect(activeQuestion(page).locator('.validation-container')).toBeVisible(); + await stabilizeVisual(page, testInfo); + + await expect(activeQuestion(page, 'BOUNDED')).toHaveScreenshot( + 'participant-validation-state.png', + screenshotOptions, + ); + + await page.reload(); + await page.waitForFunction(() => window.questHarness?.ready === true); + await page.evaluate((markdown) => window.questHarness.render({ markdown }), readCanonicalFixture('runtimeControls.txt')); + await goNext(page); + await expect(page.locator('#softModal')).toHaveClass(/show/); + await stabilizeVisual(page, testInfo); + await expect(page.locator('#softModal .modal-content')).toHaveScreenshot( + 'participant-soft-modal.png', + screenshotOptions, + ); + }); + + test('keeps keyboard focus visible on an active text control', async ({ page }, testInfo) => { + await openParticipant(page, { fixture: 'navigationState.txt' }); + await selectLabeledResponse(page, 'Yes'); + await goNext(page); + await waitInHarness(page, 550); + await activeQuestion(page, 'DETAIL').locator('#detail').focus(); + await stabilizeVisual(page, testInfo); + + await expect(activeQuestion(page, 'DETAIL')).toHaveScreenshot( + 'participant-keyboard-focus.png', + screenshotOptions, + ); + }); + + test('keeps the authoring workspace layout stable', async ({ page, diagnostics }, testInfo) => { + await installAuthoringRoutes(page, diagnostics); + await page.goto('/index.html'); + await waitForAuthoringReady(page); + await renderAuthoringMarkdown(page, readCanonicalFixture('runtimeControls.txt')); + await stabilizeVisual(page, testInfo); + + await expect(page.locator('#tool')).toHaveScreenshot('authoring-workspace.png', { + ...screenshotOptions, + maxDiffPixelRatio: 0.02, + }); + }); +}); diff --git a/tests/e2e/visual.spec.js-snapshots/authoring-workspace-chromium-desktop.png b/tests/e2e/visual.spec.js-snapshots/authoring-workspace-chromium-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..fb87553d963e55a8c08db8f0718f37b7f38a1fe0 GIT binary patch literal 53858 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 WC^XM4>GJ#N1VS%_2R8>L7W@r!@w{vR literal 0 HcmV?d00001 diff --git a/tests/e2e/visual.spec.js-snapshots/participant-keyboard-focus-chromium-desktop.png b/tests/e2e/visual.spec.js-snapshots/participant-keyboard-focus-chromium-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..23d0bc6487b9bb63af8a136e76f7dea943b44840 GIT binary patch literal 1297 zcmeAS@N?(olHy`uVBq!ia0y~yV7>rk_i``+$qOc|+zbpX$2?seLn`LHxqCKiPO8kY zhv{nh0m*hEN`ko;%Y>sv@9bE;Y|)ELy)T>u?EMyKJNi4E^g6hfQM6@VQ&7eux0uch zU$aodCex!AQZ7kMw%Ru-VA+kU2Iij+#fYm+zIp%8Pt}>8tMax-GcYvtlrb_eB(azS zE#=H(VBiqC!@wY*vV)O9!J~kg!C}G!Hiia;gS-q3j!n`G3{9g7fx#2zFy$azw_m*pU0Pp$6J>DKU2ZTus}cg_3`-se_o%RySJX}&Z@Yh<@?{Q`~UO1 zxBoq0n7{B2{hzbDE}|~|-^-sTnQW(pTc_WT-(8To8yNrVvp)ao{pFbZxt_cK&-Sj> zvg=Km7+%ab_hlM@$hb0Z?wVKaQ@8pxM#t{h5?gNG1}L!Yl-9B#dp%fw@KsmaOg z-M>>EfClaW8TkIz->E>~4B{Mf%ecH(zV52-1qE~V%JWAmBn7hBCG@t>y?Al=w{M5P z`^wm5ie^lh-CUDVwuq-=D>Kh@V2Hekt^VEHD$FYNW^KCPG)7b`0K6X)9j*b z{yzAUKYO=zHT!S#KW1&qX6)K*_4UA&-TL#ajP0Y@mi!aDe2cN|L~eS?mvw*Rf#uo% k|GuSXCIcC4pc0LlK}YPl(6ZGVJb@w%p00i_>zopr0DiN`a{vGU literal 0 HcmV?d00001 diff --git a/tests/e2e/visual.spec.js-snapshots/participant-soft-modal-chromium-desktop.png b/tests/e2e/visual.spec.js-snapshots/participant-soft-modal-chromium-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7638b289e3d5a0e274bf929c0c98d5aedebe2b GIT binary patch literal 2038 zcmd^ASx}Q#6#gNjSO{PcMOhV@0cGomA_5`E7AO+bF(?8CgA@!)%pi*_f>jHt!jG+h zl*LlqCdiUd2pE$fO-QLE$_|nc0l@_bMj(MCK!5D`q}KMi_u<9CIA51e!gCZ0YGgITEAMS4$X!A7svphQRU~g|42&dl!%Wxa@w#(T12^+Yqp*P z-ZCh=`iqtvSrd8yN7jtJs%3!Ga&Rab@z7Qu&UsBv)o$Y;8Umd6d+G0IQEq6ouOB_- z?1|NI0@*jWl{%Mm__NEiio=Dy;^k%Vo!R8%q_wqmbzfVXPn9U%0MMcPR35_e7v{ro zI3jUIuta!Cc-?*1N)d=!iaeF_LfDMbhQsxtIM56w=y;gET>Fx(diSKEw|C4E6Dyt} zm!-w_jM33P-=op!Y)rWg(8E`$R4;mZt{B)Wlo}KYfm7XEP++CRWiAH~su2j$(N??M zTwRU*z@l8IC~$0^N~Nm1^SNpV(h?j55r&-${zZ0W#>UV|p~fw$MV{GFx6Jta#8@~8 zHvkTA-iM-f60p@lldX$dYqIq1N>OGfYe!p_I*Pj?Q&75Z1Bs{)bRm+nE^$n@ZX;>< z`U=(b^gd};5Kb>9sBOKrE^Uv~nO}i?-%BDY+}&eTC;uQ87{DbKqqBcDLEXDghmvvR4VKwfHICT1*PTb>B)G^nyzB;e*YVlfWScXU|^Z^ z#_TCvLB>#$c>7YPTtnCNI&(vE7HoZ_nTg3#8K}x-@nD_uF2st*#&EW%i8Quy&PH*5 zc7or9aQV2Hlqc3zYqGq|r;;SVS7ev>HOy~W{um6>o($LVbieJ(vs`JH<_yH-(Xv{>vSQ8+}a+idrWCP3p zPlfytjJ>U8R2{@%ZqYRU28l%SeFEzTZRSsrGwL6hi3DRT7OT@S!8raJH@ENGIVzoA zmCC!+f$`bAU2S=WDV@UO_^G}@*CXgW;~jv7-buOJ$1VFsP$~#?v29Dj6E`22^QNMUFN<>bEQy% z39Wh&XkO*eNO2mmcBIk~9~6Q2uReyqF7ctyl0g)0ro}OOVR=!U6hy zW#=@(r8~CoY_B`=82)TW$hOZB?CQJjAvSH=qzUZs>Z1R70^9qz$X*NB(b3Tnn;{EL zXQs|mfc)0U{#yFzaDTsiK{^Hz5~K&VwzkOBIjh#;XvdP6m>9W4WDWEPAu8SL=-B8+ zlDr##%w#f&!w=6X=3aBJ7=Wh8D|*CnikY(wk^B zJ)^~xEewTv%SdBg-CKwqEd$FB1O(XH+3CRHkeD?mPWA~rA&so6s-oT&E6miNO+&$b z(Ysmcl1zuB7bJLn!ipFY?UfbcTqqt|tX-9D7+`qlXg0pwdsWW?KW~gzjYs%*e*p?C Br7!>h literal 0 HcmV?d00001 diff --git a/tests/e2e/visual.spec.js-snapshots/participant-validation-state-chromium-desktop.png b/tests/e2e/visual.spec.js-snapshots/participant-validation-state-chromium-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2109532edfa89c55eece9fb4cfad6d746fe6b1 GIT binary patch literal 5297 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 { + test.beforeEach(async ({}, testInfo) => { + test.skip( + testInfo.project.name !== 'chromium-windows-ua', + 'These checks characterize the Quest Windows user-agent branch used for JAWS support.', + ); + }); + + test('adds response-container tab stops and persists pointer selection', async ({ page }) => { + await openParticipant(page); + await expect(page.locator('.question.active .response')).toHaveCount(2); + await expect(page.locator('.question.active .response').first()).toHaveAttribute('tabindex', '0'); + + await selectLabeledResponse(page, 'Green'); + await expect(activeQuestion(page).locator('#CHOICE_2')).toBeChecked(); + await expectHealthyHarness(page); + }); + + test('moves the grid focus helper through the next row and terminal Next target after radio selections', async ({ page }) => { + await openParticipant(page, { fixture: 'gridResponsive.txt' }); + await goNext(page); + await waitInHarness(page, 550); + + const question = activeQuestion(page, 'GRID_RATE'); + await question.locator('tr[data-question-id="GRID_WALK"] label', { hasText: 'Sometimes' }).click(); + + await expect(question.locator('#srFocusHelper')).toBeFocused(); + await expect(question.locator('#qtextGRID_CYCLE #srFocusHelper')).toHaveCount(1); + await question.locator('tr[data-question-id="GRID_CYCLE"] label', { hasText: 'Often' }).click(); + + await expect(question.locator('#srFocusHelper')).toBeFocused(); + await expect(question.getByRole('button', { name: 'Next question' }).locator('#srFocusHelper')).toHaveCount(1); + await expectHealthyHarness(page); + }); + + test('keeps checkbox-grid focus in an intermediate cell and moves it to Next at the terminal cell', async ({ page }) => { + await openParticipant(page, { fixture: 'gridCheckboxFocus.txt' }); + await goNext(page); + await waitInHarness(page, 550); + const question = activeQuestion(page, 'GRID_CHECK'); + + const firstCell = question.locator('tr[data-question-id="GRID_CHECK_ROW_A"] td.response').first(); + await firstCell.locator('label', { hasText: 'Phone' }).click(); + await expect(firstCell.locator('#srFocusHelper')).toHaveCount(1); + await expect(question.locator('#srFocusHelper')).toBeFocused(); + + const terminalCell = question.locator('tr[data-question-id="GRID_CHECK_ROW_B"] td.response').last(); + await terminalCell.locator('label', { hasText: 'Email' }).click(); + await expect(question.getByRole('button', { name: 'Next question' }).locator('#srFocusHelper')).toHaveCount(1); + await expect(question.locator('#srFocusHelper')).toBeFocused(); + await expect(firstCell.locator('input[type="checkbox"]')).toBeChecked(); + await expect(terminalCell.locator('input[type="checkbox"]')).toBeChecked(); + await expectHealthyHarness(page); + }); +}); diff --git a/tests/fixtures/canonical/allConstructs.txt b/tests/fixtures/canonical/allConstructs.txt new file mode 100644 index 0000000..2ed2146 --- /dev/null +++ b/tests/fixtures/canonical/allConstructs.txt @@ -0,0 +1,81 @@ +// Renderer fixture for syntax that is uncommon or absent in the locked production survey corpus. +{"name":"TEST_ALL_CONSTRUCTS"} + +[PLAIN] Plain informational question with a user value {$u:firstName}, a saved value {$SAVED:fallback}, and an expression {#1 + 1}. +|displayif=equals(SHOW_INLINE,1)|Inline conditional text| +|displayif=equals(SHOW_BLOCK,1):|Block conditional text| +|displayList(LIST_VALUE)| +|displayList(LIST_VALUE):| +|popup|More information|Help title|Synthetic help text| +|image|episphere.github.io/quest/images/FemaleBaldness1.png|40,80| + +[RADIO?] Radio choices, including response metadata and an explicit skip. +(1) First radio +(2:RADIO_GROUP|SECOND_RADIO_LABEL,displayif=equals(SHOW_RADIO,1)) Second radio -> CHECKBOX + +[CHECKBOX?|min-count=1 max-count=2|] Checkbox choices, including XOR/reset and response display logic. +[1] First checkbox +[2,displayif=equals(SHOW_CHECKBOX,1)] Second checkbox +[99*] None of these + +[COMBINED?] Checkbox with an embedded text box and skip. +[807835037|COMBINED_OTHER_LABEL] Other [text box:COMBINED_TEXT] -> EMAIL + +[COMBINED_TEXTAREA?] Radio with an embedded text area and skip. +(1:COMBINED_TEXTAREA_GROUP|COMBINED_TEXTAREA_LABEL) Other details -> EMAIL + +[CONFIRM?] Authored confirmation relationship. + + + +[EMAIL?] Email address |@|id=EMAIL_VALUE| + +[PHONE?] Telephone |tel|id=PHONE_VALUE| + +[FULL_SSN?] Full SSN |SSN|id=FULL_SSN_VALUE| + +[SHORT_SSN?] Last four SSN digits |SSNsm|id=SHORT_SSN_VALUE| + +[ZIP?] ZIP code |zip|id=ZIP_VALUE| + +[STATE?] State |state|id=STATE_VALUE| + +[DATE?] Date |date|id=DATE_VALUE min=2020-01-01 max=2030-12-31| + +[MONTH?] Month |month|id=MONTH_VALUE min=2020-01 max=2030-12| + +[TIME?] Time |time|id=TIME_VALUE| + +[NUMBER?] Number |__|__|id=NUMBER_VALUE min=1 max=10| + +[TEXT?] Text before |__|id=TEXT_VALUE minlen=2 maxlen=12| text after. + +[TEXTBOX?] Text-box macro [text box:TEXTBOX_VALUE] + +[TEXTAREA?] Long answer |___|TEXTAREA_VALUE| + +[HIDDEN] Hidden host value |hidden|id=HIDDEN_VALUE| + +[YES_NO?] Yes/no macro. #YN + +[YES_NO_PREFER?] Yes/no/prefer-not macro. #YNP + +[DEFAULT_SKIP] Default hidden transition. +< -> GRID_RADIO > + +[NO_RESPONSE_SKIP?] No-response transition. +|__|id=OPTIONAL_VALUE| +< #NR -> GRID_RADIO > + +|grid?|id="GRID_RADIO" displayif=equals(SHOW_GRID,1)|Radio grid {$u:firstName}|[GRID_ROW_A] First row;[GRID_ROW_B,displayif=equals(SHOW_ROW,1)] Second row;|(1: Never)(2: Often)| + +|grid!|id="GRID_CHECKBOX"|Checkbox grid|[GRID_CHECK_ROW] A row;|[1: Alpha][2: Beta]| + +[D_900000002?] Loop count |__|__|id=D_900000002 min=0 max=2| + + +[LOOP_ITEM?,displayif=greaterThanOrEqual(D_900000002,#loop)] Loop item {##}. +|__|id=LOOP_ITEM_VALUE| + + +[END,end] Construct rendering complete. diff --git a/tests/fixtures/canonical/asyncQuestion.txt b/tests/fixtures/canonical/asyncQuestion.txt new file mode 100644 index 0000000..ea590b0 --- /dev/null +++ b/tests/fixtures/canonical/asyncQuestion.txt @@ -0,0 +1,10 @@ +// Canonical host-provided asynchronous question fixture. +{"name":"TEST_ASYNC"} + +[SEED?] Select a category. +(1) Clinical +(2) Research + +[ASYNC?] + +[END,end] You have reached the end of this test survey. Submit your answers. diff --git a/tests/fixtures/canonical/gridCheckboxFocus.txt b/tests/fixtures/canonical/gridCheckboxFocus.txt new file mode 100644 index 0000000..44e6406 --- /dev/null +++ b/tests/fixtures/canonical/gridCheckboxFocus.txt @@ -0,0 +1,8 @@ +// Canonical Windows focus fixture for checkbox-grid cell and terminal branches. +{"name":"TEST_GRID_CHECKBOX_FOCUS"} + +[GRID_LEAD] The next question uses a checkbox response grid. + +|grid!|id="GRID_CHECK"|Which support options apply?|[GRID_CHECK_ROW_A] First need;[GRID_CHECK_ROW_B] Second need;|[1: Phone][2: Email]| + +[END,end] You have reached the end of this test survey. Submit your answers. diff --git a/tests/fixtures/canonical/gridResponsive.txt b/tests/fixtures/canonical/gridResponsive.txt new file mode 100644 index 0000000..b09ecc5 --- /dev/null +++ b/tests/fixtures/canonical/gridResponsive.txt @@ -0,0 +1,8 @@ +// Responsive radio-grid fixture. +{"name":"TEST_GRID"} + +[GRID_LEAD] The next question uses a response grid. + +|grid?|id="GRID_RATE"|How often do you do each activity?|[GRID_WALK] Walking;[GRID_CYCLE] Cycling;]|[(1: Never)(2: Sometimes)(3: Often)]| + +[END,end] You have reached the end of this test survey. Submit your answers. diff --git a/tests/fixtures/canonical/imageAlt.txt b/tests/fixtures/canonical/imageAlt.txt new file mode 100644 index 0000000..03445e4 --- /dev/null +++ b/tests/fixtures/canonical/imageAlt.txt @@ -0,0 +1,4 @@ +{"name":"TEST_IMAGE_ALT"} + +[PLAIN] Reference image for a participant-facing choice. +|image|episphere.github.io/quest/images/FemaleBaldness1.png|40,80| diff --git a/tests/fixtures/canonical/loopBoundaries.txt b/tests/fixtures/canonical/loopBoundaries.txt new file mode 100644 index 0000000..4f15fc9 --- /dev/null +++ b/tests/fixtures/canonical/loopBoundaries.txt @@ -0,0 +1,12 @@ +// 0/1/2/25 iteration boundary fixture. +{"name":"TEST_LOOP_BOUNDARIES"} + +[D_900000001!] How many loop iterations should run? +|__|__|id=D_900000001 min=0 max=25| + + +[ITEM?,displayif=greaterThanOrEqual(D_900000001,#loop)] Confirm the {##} loop iteration. +(1) Continue + + +[END,end] Loop navigation complete. diff --git a/tests/fixtures/canonical/module4AddressPaths.txt b/tests/fixtures/canonical/module4AddressPaths.txt new file mode 100644 index 0000000..08511cd --- /dev/null +++ b/tests/fixtures/canonical/module4AddressPaths.txt @@ -0,0 +1,50 @@ +// Production-shaped extract from locked prod/module4.txt (D_716117817 v2.0). +{"name":"D_716117817"} + +[D_121490150?] What is the full street address of the place where you live now? + +Street number |__|id=D_255248624 minlen=0 maxlen=6| +Full Street name |__|id=D_945532934| +Apartment, suite, unit, building, etc. |__|id=D_469838242| +City |__|id=D_303500597| +State/Province |__|id=D_195068098| +Zip code |__|id=D_202784871| +Country |__|id=D_831127170| + +[D_920576363?,displayif=or(or(isNotDefined(D_303500597,false),isNotDefined(D_195068098,false)),or(isNotDefined(D_202784871,false),isNotDefined(D_831127170,false)))] Please provide the following information: + +City: |displayif=exists("D_303500597")|{$D_303500597}| +|__|id=D_725583683 displayif=doesNotExist("D_303500597")| + +State/Province: |displayif=exists("D_195068098")| {$D_195068098}| +|__|id=D_917021073 displayif=doesNotExist("D_195068098")| + +Zip code: |displayif=exists("D_202784871") | {$D_202784871}| +|__|id=D_970000442 displayif=doesNotExist("D_202784871")| + +Country: |displayif=exists("D_831127170")| {$D_831127170}| +|__|id=D_500100435 displayif=doesNotExist("D_831127170")| +[178420302*] Don't know + +[D_804504024?,displayif=noneExist("D_255248624","D_945532934") and someExist("D_725583683","D_917021073","D_970000442","D_500100435","D_303500597","D_195068098","D_202784871","D_831127170")] Please provide the cross streets of the intersection closest to this address: + +Full Street name #1 |__|id=D_105043152| +Full Street name #2 |__|id=D_543135391| +[178420302*] Don't know + +[HOMEADD4_1] Here is the information you gave us for this location: + +|displayif=noneExist("D_255248624","D_945532934","D_469838242","D_303500597","D_725583683","D_195068098","D_917021073","D_202784871","D_970000442","D_831127170","D_500100435")|current address
||displayif=someExist("D_255248624","D_945532934","D_469838242","D_303500597","D_725583683","D_195068098","D_917021073","D_202784871","D_970000442","D_831127170","D_500100435")| {$D_105043152} {$D_543135391} {$D_255248624} {$D_945532934} {$D_469838242} {$D_303500597} {$D_725583683} {$D_195068098} {$D_917021073} {$D_202784871} {$D_970000442} {$D_831127170} {$D_500100435}| + +If this information is not correct, please click the “Back” button to edit your answers before moving on. + +[D_290969423?] Within the past 20 years, have you lived anywhere else for at least two years? +(353358909) Yes -> D_574985342 +(104430631) No -> END + +[D_574985342?] What is the full street address of the place you lived before you lived at |displayif=someExist("D_255248624","D_945532934","D_469838242","D_303500597","D_725583683","D_195068098","D_917021073","D_202784871","D_970000442","D_831127170","D_500100435")|{$D_105043152} {$D_543135391} {$D_255248624} {$D_945532934} {$D_469838242} {$D_303500597} {$D_725583683} {$D_195068098} {$D_917021073} {$D_970000442} {$D_831127170} {$D_500100435}||displayif=noneExist("D_255248624","D_945532934","D_469838242","D_303500597","D_725583683","D_195068098","D_917021073","D_202784871","D_970000442","D_831127170","D_500100435")|Current Address|? Please only include addresses where you have lived for at least two years. + +Street number |__|id=D_985267931 minlen=0 maxlen=6| +Full Street name |__|id=D_111275683| + +[END,end] Done. diff --git a/tests/fixtures/canonical/module4AddressPathsSpanish.txt b/tests/fixtures/canonical/module4AddressPathsSpanish.txt new file mode 100644 index 0000000..cc963fa --- /dev/null +++ b/tests/fixtures/canonical/module4AddressPathsSpanish.txt @@ -0,0 +1,39 @@ +// Production-shaped extract from locked prod/module4Spanish.txt (D_716117817 v2.0). +{"name":"D_716117817"} + +[D_121490150?]¿Cuál es la dirección completa del lugar donde vive actualmente? + +Número de la calle |__|id=D_255248624 minlen=0 maxlen=6| +Nombre completo de la calle |__|id=D_945532934| +Apartamento, suite, unidad, edificio, etc. |__|id=D_469838242| +Ciudad |__|id=D_303500597| +Estado o provincia |__|id=D_195068098| +Código postal |__|id=D_202784871| +País |__|id=D_831127170| + +[D_920576363?,displayif=or(or(isNotDefined(D_303500597,false),isNotDefined(D_195068098,false)),or(isNotDefined(D_202784871,false),isNotDefined(D_831127170,false)))] Suministre la siguiente información: + +Ciudad: |displayif=exists("D_303500597")| {$D_303500597}| +|__|id=D_725583683 displayif=doesNotExist("D_303500597")| + +Estado o provincia: |displayif=exists("D_195068098")| {$D_195068098}| +|__|id=D_917021073 displayif=doesNotExist("D_195068098")| + +Código postal: |displayif=exists("D_202784871") | {$D_202784871}| +|__|id=D_970000442 displayif=doesNotExist("D_202784871")| + +País: |displayif=exists("D_831127170")| {$D_831127170}| +|__|id=D_500100435 displayif=doesNotExist("D_831127170")| +[178420302*] No sé + +[D_804504024?,displayif=noneExist("D_255248624","D_945532934") and someExist("D_725583683","D_917021073","D_970000442","D_500100435","D_303500597","D_195068098","D_202784871","D_831127170")] Indique las calles que cruzan la intersección más cercana a esta dirección: + +Nombre completo de la calle #1 |__|id=D_105043152| +Nombre completo de la calle #2 |__|id=D_543135391| +[178420302*] No sé + +[HOMEADD4_1] Esta es la información que nos dio para esta ubicación: + +|displayif=someExist("D_255248624","D_945532934","D_469838242","D_303500597","D_725583683","D_195068098","D_917021073","D_202784871","D_970000442","D_831127170","D_500100435")| {$D_105043152} {$D_543135391} {$D_255248624} {$D_945532934} {$D_469838242} {$D_303500597}{$D_725583683} {$D_195068098}{$D_917021073} {$D_202784871}{$D_970000442} {$D_831127170}{$D_500100435}
||displayif=noneExist("D_255248624","D_945532934","D_469838242","D_303500597","D_725583683","D_195068098","D_917021073","D_202784871","D_970000442","D_831127170","D_500100435")|Dirección actual| + +[END,end] Fin. diff --git a/tests/fixtures/canonical/nativeSelect.txt b/tests/fixtures/canonical/nativeSelect.txt new file mode 100644 index 0000000..41c63bb --- /dev/null +++ b/tests/fixtures/canonical/nativeSelect.txt @@ -0,0 +1,6 @@ +{"name":"TEST_NATIVE_SELECT"} + +[STATE?] In which state do you live? +|state|id=home_state| + +[END,end] Complete. diff --git a/tests/fixtures/canonical/navigationBoundaries.txt b/tests/fixtures/canonical/navigationBoundaries.txt new file mode 100644 index 0000000..95bc9cb --- /dev/null +++ b/tests/fixtures/canonical/navigationBoundaries.txt @@ -0,0 +1,23 @@ +// Default, no-response, explicit-skip, sequential, reset, and back fixture. +{"name":"TEST_BOUNDARIES"} + +[DEFAULT_SOURCE] Continue to the branch question using the default hidden transition. +< -> PATH > + +[DEFAULT_MISS] This question must never be reached from the default transition. + +[PATH?] Choose a route, or leave this unanswered to take the no-response route. +(1) Explicit route -> EXPLICIT_TARGET +(2) Sequential route +< #NR -> NO_RESPONSE_TARGET > + +[SEQUENTIAL_TARGET] The sequential route was reached. +< -> END > + +[EXPLICIT_TARGET] The explicit route was reached. +< -> END > + +[NO_RESPONSE_TARGET] The no-response route was reached. +< -> END > + +[END,end] Boundary navigation complete. diff --git a/tests/fixtures/canonical/navigationState.txt b/tests/fixtures/canonical/navigationState.txt new file mode 100644 index 0000000..5c3cab3 --- /dev/null +++ b/tests/fixtures/canonical/navigationState.txt @@ -0,0 +1,13 @@ +// Navigation, conditional skip, restore, and submission fixture. +{"name":"TEST_NAV"} + +[PATH?] Would you like to answer a detail question? +(1) Yes -> DETAIL +(0) No -> SUMMARY + +[DETAIL?] Add a short detail. +|__|id=detail minlen=2 maxlen=30| + +[SUMMARY] Review your answers, then continue. + +[END,end] You have reached the end of this test survey. Submit your answers. diff --git a/tests/fixtures/canonical/nestedTextPresence.txt b/tests/fixtures/canonical/nestedTextPresence.txt new file mode 100644 index 0000000..ae0b0fb --- /dev/null +++ b/tests/fixtures/canonical/nestedTextPresence.txt @@ -0,0 +1,18 @@ +// Regression fixture for production-shaped nested text controls used by presence conditions. +{"name":"TEST_NESTED_TEXT_PRESENCE"} + +[D_470013848?] Which type of phone do you use? +[807835037] Other phone |__|id=D_495052121| + +[D_731524314?] Which type of tablet do you use? +[807835037] Other tablet |__|id=D_638847244| + +[D_403175318?] Which type of computer do you use? +[807835037] Other computer |__|id=D_507471937| + +[D_260186214?] Which device do you use most often? +(793072415,displayif=equals(D_470013848,807835037)) {$D_495052121} |displayif=doesNotExist("D_495052121")|Other phone| +(401230883,displayif=equals(D_731524314,807835037)) {$D_638847244} |displayif=doesNotExist("D_638847244")|Other tablet| +(320254475,displayif=equals(D_403175318,807835037)) {$D_507471937} |displayif=doesNotExist("D_507471937")|Other computer| + +[END,end] End of regression fixture. diff --git a/tests/fixtures/canonical/runtimeControls.txt b/tests/fixtures/canonical/runtimeControls.txt new file mode 100644 index 0000000..a67ed5b --- /dev/null +++ b/tests/fixtures/canonical/runtimeControls.txt @@ -0,0 +1,27 @@ +// Canonical participant fixture: one stable example of each common control. +{"name":"TEST_RUNTIME"} + +[CHOICE?] Which color do you prefer? +(1) Blue +(2) Green + +[CHECKS?] Which messages would you like to receive? Select all that apply. +[1] Email +[2] Text message + +[TEXT?] What nickname should we use? +|__|id=nickname minlen=2 maxlen=20| + +[NUMBER?] How many visits have you completed? +|__|__|id=visit_count min=1 max=10| + +[STATE?] In which state do you live? +|state|id=home_state| + +[DATE?] What was the date of your latest visit? +|date|id=visit_date| + +[TIME?] What time did your latest visit begin? +|time|id=visit_time| + +[END,end] You have reached the end of this test survey. Submit your answers. diff --git a/tests/fixtures/canonical/validation.txt b/tests/fixtures/canonical/validation.txt new file mode 100644 index 0000000..3646bb4 --- /dev/null +++ b/tests/fixtures/canonical/validation.txt @@ -0,0 +1,6 @@ +{"name":"TEST_VALIDATE"} + +[BOUNDED?] Enter a number from 1 through 3. +|__|__|id=bounded min=1 max=3| + +[END,end] You have reached the end of this test survey. Submit your answers. diff --git a/tests/harness/connectHost.css b/tests/harness/connectHost.css new file mode 100644 index 0000000..9a07eb2 --- /dev/null +++ b/tests/harness/connectHost.css @@ -0,0 +1,38 @@ +:root { + color-scheme: light; + font-family: Arial, sans-serif; +} + +body { + margin: 0; + background: #fff; + color: #212529; +} + +.connect-container { + width: min(100%, 1200px); + margin: 0 auto; +} + +.connect-test-header, +.connect-test-footer { + padding: 0.75rem 1rem; + background: #f5f7f9; +} + +.connect-test-header { + border-bottom: 1px solid #d9dee3; +} + +.connect-test-footer { + border-top: 1px solid #d9dee3; +} + +#root { + min-height: 28rem; + padding: 0 0.75rem 1.5rem; +} + +#questionnaireRoot { + min-width: 0; +} diff --git a/tests/harness/mathjsLocal.js b/tests/harness/mathjsLocal.js new file mode 100644 index 0000000..41b55d3 --- /dev/null +++ b/tests/harness/mathjsLocal.js @@ -0,0 +1,3 @@ +// Browser-test import-map for Quest's exact production CDN specifier. +// Vite resolves this import to the suite's pinned, local dependency. +export { all, create } from 'mathjs'; diff --git a/tests/harness/participant.html b/tests/harness/participant.html new file mode 100644 index 0000000..e139781 --- /dev/null +++ b/tests/harness/participant.html @@ -0,0 +1,43 @@ + + + + + + Quest participant harness + + + +
+
+ Participant dashboard +
+ +
+
+
+ + + +
+
+
+ +
+ +
+
+ + + + diff --git a/tests/harness/participant.js b/tests/harness/participant.js new file mode 100644 index 0000000..8911d3b --- /dev/null +++ b/tests/harness/participant.js @@ -0,0 +1,253 @@ +import './connectHost.css'; +import 'bootstrap/dist/css/bootstrap.min.css'; +import '../../ActiveLogic.css'; +import '../../Style1.css'; + +import * as bootstrap from 'bootstrap'; +import { transform } from '../../main.js'; +import { getStateManager } from '../../stateManager.js'; + +globalThis.bootstrap = bootstrap; + +const questRoot = document.getElementById('questionnaireRoot'); +const eventTypes = ['click', 'change', 'input', 'keydown', 'keyup', 'focusin', 'focusout', 'submit']; +const pendingStores = new Set(); +const pendingAsyncLoads = new Set(); +let storeSettlementSequence = 0; + +let rendered = false; +let currentConfig = {}; + +const logs = { + renders: [], + storeCalls: [], + retrieveCalls: [], + asyncCalls: [], + errors: [], + events: [], + host: { keydownCount: 0 }, +}; + +const wait = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)); + +function serializable(value, depth = 0, seen = new WeakSet()) { + if (value == null || ['string', 'number', 'boolean'].includes(typeof value)) return value; + if (typeof value === 'bigint') return value.toString(); + if (typeof value === 'function') return `[Function ${value.name || 'anonymous'}]`; + if (value instanceof Date) return value.toISOString(); + if (value instanceof Error) return { name: value.name, message: value.message, stack: value.stack, code: value.code }; + if (value instanceof Element) return describeTarget(value); + if (depth >= 10) return String(value); + if (typeof value === 'object') { + if (seen.has(value)) return '[Circular]'; + seen.add(value); + if (Array.isArray(value)) return value.map((item) => serializable(item, depth + 1, seen)); + return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, serializable(child, depth + 1, seen)])); + } + return String(value); +} + +function describeTarget(target) { + if (!(target instanceof Element)) return String(target); + return { + tag: target.tagName.toLowerCase(), + id: target.id || null, + name: target.getAttribute('name'), + type: target.getAttribute('type'), + className: typeof target.className === 'string' ? target.className : null, + }; +} + +for (const type of eventTypes) { + document.addEventListener(type, (event) => { + if (type === 'keydown') logs.host.keydownCount += 1; + if (logs.events.length < 500) logs.events.push({ + type, + key: 'key' in event ? event.key : null, + defaultPrevented: event.defaultPrevented, + target: describeTarget(event.target), + }); + }); +} + +function trackPromise(promise, collection) { + collection.add(promise); + promise.then(() => collection.delete(promise), () => collection.delete(promise)); + return promise; +} + +function configuredOutcome(outcomes, callIndex) { + if (!Array.isArray(outcomes) || outcomes.length === 0) return { kind: 'resolve', value: { code: 200 } }; + return outcomes[Math.min(callIndex, outcomes.length - 1)] ?? { kind: 'resolve', value: { code: 200 } }; +} + +function makeStore() { + return (changes) => { + const outcome = configuredOutcome(currentConfig.storeOutcomes, logs.storeCalls.length); + const call = { + changes: serializable(changes), + outcome: serializable(outcome), + status: 'pending', + settlementIndex: null, + }; + logs.storeCalls.push(call); + const operation = (async () => { + try { + if (outcome.delayMs) await wait(outcome.delayMs); + if (outcome.kind === 'reject') { + const error = new Error(outcome.message || 'Synthetic store rejection'); + if (outcome.code != null) error.code = outcome.code; + throw error; + } + const value = outcome.value ?? { code: outcome.code ?? 200 }; + call.status = 'fulfilled'; + call.value = serializable(value); + return value; + } catch (error) { + call.status = 'rejected'; + call.error = serializable(error); + throw error; + } finally { + storeSettlementSequence += 1; + call.settlementIndex = storeSettlementSequence; + } + })(); + return trackPromise(operation, pendingStores); + }; +} + +function makeRetrieve() { + return async () => { + logs.retrieveCalls.push({ at: new Date().toISOString() }); + if (currentConfig.retrieveDelayMs) await wait(currentConfig.retrieveDelayMs); + if (currentConfig.retrieveError) throw new Error(currentConfig.retrieveError); + if (Object.hasOwn(currentConfig, 'retrieveResponse')) return currentConfig.retrieveResponse; + return { data: { fixture: currentConfig.persistedData ?? {} } }; + }; +} + +function makeAsyncQuestionLoader() { + return (func, args) => { + const outcome = configuredOutcome(currentConfig.asyncOutcomes, logs.asyncCalls.length); + const call = { func: serializable(func), args: serializable(args), outcome: serializable(outcome), status: 'pending' }; + logs.asyncCalls.push(call); + const operation = (async () => { + try { + const delayMs = outcome.delayMs ?? currentConfig.asyncDelayMs ?? 0; + if (delayMs) await wait(delayMs); + if (outcome.kind === 'reject') throw new Error(outcome.message || 'Synthetic async question rejection'); + const target = questRoot.querySelector('form.question.active fieldset, form.question.active tbody'); + if (target && currentConfig.asyncQuestionHtml) target.innerHTML = currentConfig.asyncQuestionHtml; + call.status = 'fulfilled'; + call.value = serializable(outcome.value); + return outcome.value; + } catch (error) { + call.status = 'rejected'; + call.error = serializable(error); + throw error; + } + })(); + return trackPromise(operation, pendingAsyncLoads); + }; +} + +function errorLogger(...args) { + logs.errors.push({ + message: args.map((arg) => arg instanceof Error ? arg.message : String(arg)).join(' '), + args: serializable(args), + }); +} + +async function flush() { + while (pendingStores.size > 0 || pendingAsyncLoads.size > 0) { + await Promise.allSettled([...pendingStores, ...pendingAsyncLoads]); + } + await wait(0); +} + +function stateSnapshot() { + const stateManager = getStateManager(true); + return stateManager ? { + survey: serializable(stateManager.getSurveyState()), + active: serializable(stateManager.getActiveQuestionState()), + mapping: serializable(stateManager.getResponseToQuestionMapping()), + cache: serializable(stateManager.getCache()), + } : null; +} + +function snapshot() { + return serializable({ + activeQuestionId: questRoot.querySelector('form.question.active')?.id ?? null, + focusedElement: describeTarget(document.activeElement), + state: stateSnapshot(), + logs, + }); +} + +function normalizeHarnessConfig(config) { + const normalized = { ...config, markdown: config.markdown ?? config.text ?? '' }; + if (config.retrieveResponse !== undefined || config.retrieveResult !== undefined) normalized.retrieveResponse = config.retrieveResponse ?? config.retrieveResult; + if (config.showProgressBarInQuest !== undefined || config.showProgress !== undefined) normalized.showProgressBarInQuest = config.showProgressBarInQuest ?? config.showProgress; + if (config.asyncOutcomes !== undefined || config.asyncFixtures?.outcomes !== undefined) normalized.asyncOutcomes = config.asyncOutcomes ?? config.asyncFixtures.outcomes; + if (config.asyncQuestionHtml !== undefined || config.asyncFixtures?.html !== undefined) normalized.asyncQuestionHtml = config.asyncQuestionHtml ?? config.asyncFixtures.html; + if (config.asyncDelayMs !== undefined || config.asyncFixtures?.delayMs !== undefined) normalized.asyncDelayMs = config.asyncDelayMs ?? config.asyncFixtures.delayMs; + if (!Object.hasOwn(config, 'surveyDataPrefetch')) { + if (Object.hasOwn(config, 'prefetch')) normalized.surveyDataPrefetch = config.prefetch; + else if (Object.hasOwn(config, 'persistedData')) normalized.surveyDataPrefetch = config.persistedData; + } + if (!Array.isArray(config.storeOutcomes) && config.storeMode) { + const delayMs = config.hostDelayMs ?? (config.storeMode === 'delayed' ? 50 : 0); + const outcome = { + success: { kind: 'resolve', value: { code: 200 } }, + non200: { kind: 'resolve', value: { code: 503, message: 'Synthetic non-200 store response' } }, + rejected: { kind: 'reject', message: 'Synthetic store rejection' }, + delayed: { kind: 'resolve', value: { code: 200 } }, + }[config.storeMode]; + if (outcome) normalized.storeOutcomes = [{ ...outcome, ...(delayMs ? { delayMs } : {}) }]; + } + return normalized; +} + +async function render(config = {}) { + if (rendered) throw new Error('Quest is stateful: participant harness permits one render per page. Reload for a fresh module graph.'); + rendered = true; + currentConfig = structuredClone(normalizeHarnessConfig(config)); + document.documentElement.lang = currentConfig.lang === 'es' ? 'es' : 'en'; + questRoot.style.visibility = 'hidden'; + const params = { + activate: currentConfig.activate ?? true, + asyncQuestionsMap: currentConfig.asyncQuestionsMap ?? {}, + delayedParameterArray: currentConfig.delayedParameterArray ?? [], + errorLogger, + fetchAsyncQuestion: makeAsyncQuestionLoader(), + lang: currentConfig.lang ?? 'en', + isRenderer: currentConfig.isRenderer ?? false, + questVersion: currentConfig.questVersion ?? 'test-local', + retrieve: makeRetrieve(), + showProgressBarInQuest: currentConfig.showProgressBarInQuest ?? true, + store: makeStore(), + text: currentConfig.markdown, + url: currentConfig.url ?? '', + }; + if (Object.hasOwn(currentConfig, 'surveyDataPrefetch')) params.surveyDataPrefetch = currentConfig.surveyDataPrefetch; + const result = await transform.render(params, 'questionnaireRoot', currentConfig.previousResults ?? {}); + questRoot.style.visibility = 'visible'; + logs.renders.push({ result, config: serializable(currentConfig) }); + await new Promise((resolve) => requestAnimationFrame(() => requestAnimationFrame(resolve))); + return { result, activeQuestionId: questRoot.querySelector('form.question.active')?.id ?? null, errorCount: logs.errors.length }; +} + +window.questHarness = { ready: true, render, snapshot, flush, wait }; +window.dispatchEvent(new CustomEvent('quest-harness-ready')); + +const manualFixture = new URLSearchParams(window.location.search).get('fixture'); +if (manualFixture) { + if (!/^[a-z0-9-]+\.txt$/i.test(manualFixture)) { + errorLogger(new Error(`Invalid manual fixture name: ${manualFixture}`)); + } else { + fetch(`/tests/fixtures/canonical/${manualFixture}`) + .then((response) => response.ok ? response.text() : Promise.reject(new Error(`Fixture request failed: ${response.status}`))) + .then((markdown) => render({ markdown })) + .catch(errorLogger); + } +} diff --git a/tests/helpers/questRuntime.js b/tests/helpers/questRuntime.js new file mode 100644 index 0000000..2faea86 --- /dev/null +++ b/tests/helpers/questRuntime.js @@ -0,0 +1,105 @@ +import { vi } from 'vitest'; + +export const SIMPLE_SURVEY = ` +{"name":"TEST_MODULE"} + +[Q1?] Choose one answer. +(1) First answer +(2) Second answer + +[Q2] Enter a value. +|__|id=Q2_TEXT minlen=2 maxlen=8| + +[END] Thank you. +`; + +function createStore(mode, calls, delay = 0) { + return vi.fn(async (payload) => { + calls.push(structuredClone(payload)); + if (delay) await new Promise((resolve) => setTimeout(resolve, delay)); + if (mode === 'reject') throw new Error('Configured store rejection'); + if (mode === 'non200') return { code: 503 }; + return { code: 200 }; + }); +} + +export async function renderFreshQuest({ + markdown = SIMPLE_SURVEY, + previousResults = {}, + persistedData, + retrieveResult, + params = {}, + storeMode = 'success', + storeDelay = 0, + rootId = 'questionnaireRoot', +} = {}) { + vi.resetModules(); + document.body.innerHTML = ` + Before Quest +
+
+
+
+
+
+
+ + `; + + const storeCalls = []; + const retrieveCalls = []; + const asyncCalls = []; + const errors = []; + const store = createStore(storeMode, storeCalls, storeDelay); + const retrieve = vi.fn(async () => { + retrieveCalls.push(true); + return retrieveResult; + }); + const fetchAsyncQuestion = vi.fn(async (...args) => { + asyncCalls.push(args); + return params.asyncResult ?? ''; + }); + + const { transform } = await import('../../main.js'); + const rendered = await transform.render({ + activate: true, + text: markdown, + lang: 'en', + showProgressBarInQuest: true, + store, + retrieve, + surveyDataPrefetch: persistedData, + asyncQuestionsMap: {}, + fetchAsyncQuestion, + errorLogger: (...values) => errors.push(values), + ...params, + }, rootId, previousResults); + + const { moduleParams, questionQueue } = await import('../../questionnaire.js'); + const { getStateManager } = await import('../../stateManager.js'); + const state = getStateManager(params.isRenderer ?? false); + + return { + transform, + rendered, + root: document.getElementById(rootId), + moduleParams, + questionQueue, + state, + store, + retrieve, + fetchAsyncQuestion, + calls: { store: storeCalls, retrieve: retrieveCalls, async: asyncCalls }, + errors, + }; +} + +export async function loadFreshModuleGraph() { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + const en = (await import('../../i18n/en.js')).default; + questionnaire.moduleParams.i18n = en; + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.questDiv = document.body; + return { questionnaire, en }; +} diff --git a/tests/integration/accessibilityBehavior.spec.js b/tests/integration/accessibilityBehavior.spec.js new file mode 100644 index 0000000..c32d5be --- /dev/null +++ b/tests/integration/accessibilityBehavior.spec.js @@ -0,0 +1,124 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +const GRID_SURVEY = ` +{"name":"A11Y_GRID"} +[GRID_LEAD] Rate each item. +|grid?|id="GRID"|How often?|[ROW_ONE] First row;[ROW_TWO] Second row;|(1: Never)(2: Often)| +[END,end] Done. +`; + +function treeAt(questionID) { + return JSON.stringify({ + rootNode: { value: null, children: [{ value: questionID, children: [] }] }, + currentNode: questionID, + }); +} + +describe('screen-reader and keyboard behavior', () => { + it('uses native list controls while adding Windows-specific refocus and announcements', async () => { + const quest = await renderFreshQuest(); + quest.moduleParams.isWindowsEnvironment = true; + const radio = quest.root.querySelector('#Q1_2'); + + radio.click(); + radio.dispatchEvent(new Event('change', { bubbles: true, cancelable: true })); + + await vi.waitFor(() => expect(document.activeElement).toBe(radio)); + await vi.waitFor(() => { + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Selected.'); + }); + }); + + it('moves the Windows table focus helper to the next visible row after a radio selection', async () => { + const quest = await renderFreshQuest({ + markdown: GRID_SURVEY, + persistedData: { treeJSON: treeAt('GRID') }, + }); + quest.moduleParams.isWindowsEnvironment = true; + const firstRowChoice = quest.root.querySelector('#ROW_ONE_0'); + + firstRowChoice.click(); + firstRowChoice.dispatchEvent(new Event('change', { bubbles: true, cancelable: true })); + + const helper = quest.root.querySelector('#srFocusHelper'); + await vi.waitFor(() => expect(document.activeElement).toBe(helper)); + expect(helper.closest('tr')?.dataset.questionId).toBe('ROW_TWO'); + expect(helper.parentElement.tagName).toBe('TH'); + }); + + it('moves the Windows table focus helper to Next after the final row selection', async () => { + const quest = await renderFreshQuest({ + markdown: GRID_SURVEY, + persistedData: { treeJSON: treeAt('GRID') }, + }); + quest.moduleParams.isWindowsEnvironment = true; + const finalRowChoice = quest.root.querySelector('#ROW_TWO_1'); + + finalRowChoice.click(); + finalRowChoice.dispatchEvent(new Event('change', { bubbles: true, cancelable: true })); + + const helper = quest.root.querySelector('#srFocusHelper'); + await vi.waitFor(() => expect(document.activeElement).toBe(helper)); + expect(helper.closest('button')).toBe(quest.root.querySelector('#GRID .next')); + }); + + it('announces table selections without adding non-native selection commands on macOS paths', async () => { + const quest = await renderFreshQuest({ + markdown: GRID_SURVEY, + persistedData: { treeJSON: treeAt('GRID') }, + }); + quest.moduleParams.isWindowsEnvironment = false; + const choice = quest.root.querySelector('#ROW_ONE_1'); + + choice.click(); + choice.dispatchEvent(new Event('change', { bubbles: true })); + + await vi.waitFor(() => { + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent.trim()).toBe('Often Selected.'); + }); + expect(choice.getAttribute('role')).toBeNull(); + }); + + it('uses Up and Down only to leave nested text fields, without overriding radio native keys', async () => { + const quest = await renderFreshQuest(); + const fieldset = quest.root.querySelector('#Q1 fieldset'); + fieldset.innerHTML = ` + Other responses. +
+
+ + `; + const firstText = fieldset.querySelector('#FIRST_TEXT'); + const secondText = fieldset.querySelector('#SECOND_TEXT'); + + secondText.focus(); + secondText.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'ArrowUp' })); + await vi.waitFor(() => expect(document.activeElement).toBe(fieldset.querySelector('#FIRST_RADIO'))); + + firstText.focus(); + firstText.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'ArrowDown' })); + await vi.waitFor(() => expect(document.activeElement).not.toBe(firstText)); + + const radio = fieldset.querySelector('#SECOND_RADIO'); + radio.focus(); + const nativeArrow = new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'ArrowDown' }); + radio.dispatchEvent(nativeArrow); + expect(nativeArrow.defaultPrevented).toBe(false); + }); + + it('reconstructs and restores question focus after closing the soft-response modal', async () => { + const quest = await renderFreshQuest(); + const modal = quest.root.querySelector('#softModal'); + modal.style.display = 'block'; + + modal.dispatchEvent(new MouseEvent('click', { bubbles: true })); + + expect(modal.style.display).toBe('none'); + await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#Q1 .screen-reader-focus')), { + timeout: 1_000, + interval: 25, + }); + expect(quest.root.querySelectorAll('#Q1 .screen-reader-focus')).toHaveLength(1); + }); +}); diff --git a/tests/integration/accessibilityBuilder.spec.js b/tests/integration/accessibilityBuilder.spec.js new file mode 100644 index 0000000..bf3d783 --- /dev/null +++ b/tests/integration/accessibilityBuilder.spec.js @@ -0,0 +1,229 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +async function loadAccessibilityFixture(markup) { + const quest = await renderFreshQuest(); + quest.moduleParams.isRenderer = true; + quest.root.innerHTML = markup; + const accessibility = await import('../../accessibleQuestionTextBuilder.js'); + return { quest, accessibility }; +} + +describe('accessible question text construction', () => { + it('builds a legend for heading-style prompts and normalizes excessive breaks', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+
Section heading


Choose an answer.
+
+ `); + const fieldset = quest.root.querySelector('fieldset'); + + expect(accessibility.manageAccessibleQuestion(fieldset, false)).toBe(true); + + const legend = fieldset.querySelector('legend'); + expect(legend.textContent).toContain('Section heading'); + expect(legend.textContent).toContain('Choose an answer.'); + expect(fieldset.querySelectorAll('.screen-reader-focus')).toHaveLength(1); + expect([...fieldset.querySelectorAll('br')].every((br) => br.getAttribute('aria-hidden') === 'true')).toBe(true); + expect(fieldset.querySelectorAll('br').length).toBeLessThanOrEqual(3); + }); + + it('turns subsequent prompts in a multi-question fieldset into focusable alerts', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+
Introductory prompt.
+ Follow-up question?
+
+
+ `); + const fieldset = quest.root.querySelector('fieldset'); + + accessibility.manageAccessibleQuestion(fieldset, false); + + const followUp = fieldset.querySelector('div[role="alert"][tabindex="0"]'); + expect(followUp).not.toBeNull(); + expect(followUp.textContent).toContain('Follow-up question?'); + expect(fieldset.querySelectorAll('.response')).toHaveLength(2); + }); + + it('creates a fieldset around table questions that do not originally have one', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+ Rate each item. +
Item
+
+ `); + const question = quest.root.querySelector('.question'); + + accessibility.manageAccessibleQuestion(question, false); + + const fieldset = question.querySelector('fieldset'); + expect(fieldset).not.toBeNull(); + expect(fieldset.querySelector('legend').textContent).toContain('Rate each item.'); + expect(fieldset.querySelector('table')).not.toBeNull(); + expect(fieldset.querySelector('.screen-reader-focus')).not.toBeNull(); + }); + + it('re-evaluates legend display conditions and cleans hidden conditional whitespace', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+
+ Review visible hidden + outside detail
+
Next detail + hidden response spacing +
+
+ `); + const fieldset = quest.root.querySelector('fieldset'); + + accessibility.manageAccessibleQuestion(fieldset, false); + + const displayIfs = fieldset.querySelectorAll('legend .displayif'); + expect(displayIfs[0].style.display).toBe(''); + expect(displayIfs[1].style.display).toBe('none'); + expect(fieldset.querySelector('legend').textContent).not.toMatch(/ {3}/); + expect(fieldset.querySelector('.displayif[style*="display: block"]').getAttribute('hasupdate')).toBe('true'); + expect(fieldset.querySelector('.displayif[style*="display: none"] + br').style.display).toBe('none'); + }); + + it('updates a raw forid in an existing legend and avoids rebuilding focus controls', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+
Hello old value
+
+ `); + const fieldset = quest.root.querySelector('fieldset'); + + accessibility.manageAccessibleQuestion(fieldset, false); + accessibility.manageAccessibleQuestion(fieldset, false); + + expect(fieldset.querySelector('[forid]').textContent).toBe('participant'); + expect(fieldset.querySelectorAll('.screen-reader-focus')).toHaveLength(1); + }); + + it('applies and idempotently records the pregnancy-summary spacing exception', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+
Pregnancy summary.
Age when pregnancy began: 30


+
+ `); + const fieldset = quest.root.querySelector('fieldset'); + + accessibility.manageAccessibleQuestion(fieldset, false); + const breakCount = fieldset.querySelectorAll('br').length; + accessibility.manageAccessibleQuestion(fieldset, false); + + expect(fieldset.getAttribute('data-preg-summary-updated')).toBe('true'); + expect(fieldset.querySelectorAll('br')).toHaveLength(breakCount); + }); +}); + +describe('accessible selection focus and defensive paths', () => { + it('keeps focus on a non-final table checkbox and announces its state', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+
+ + + +
Row
+ `); + const input = quest.root.querySelector('#CHECK_1'); + const event = { target: input, type: 'change', preventDefault: vi.fn() }; + + accessibility.handleRadioCheckboxTableEvents(event); + + expect(event.preventDefault).toHaveBeenCalledOnce(); + await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#srFocusHelper'))); + expect(document.activeElement.closest('td')).toBe(input.closest('td')); + await vi.waitFor(() => expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toBe('First Selected.')); + }); + + it('moves focus from the final table checkbox to the active question Next button', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
+
+
Row
+ `); + + accessibility.handleRadioCheckboxTableEvents({ + target: quest.root.querySelector('#FINAL'), + type: 'change', + preventDefault: vi.fn(), + }); + + const helper = quest.root.querySelector('#srFocusHelper'); + await vi.waitFor(() => expect(document.activeElement).toBe(helper)); + expect(helper.closest('button')).toBe(quest.root.querySelector('button.next')); + }); + + it('logs invalid table inputs and missing focus targets without throwing', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` + + + + +
First
+ `); + const invalid = quest.root.querySelector('#BAD'); + accessibility.handleRadioCheckboxTableEvents({ target: invalid, type: 'change', preventDefault: vi.fn() }); + expect(quest.errors.some(([message]) => message.includes('Invalid event type'))).toBe(true); + + accessibility.handleRadioCheckboxTableEvents({ + target: quest.root.querySelector('#RADIO'), + type: 'change', + preventDefault: vi.fn(), + }); + await vi.waitFor(() => expect(quest.errors.some(([message]) => message.includes('Next question cell not found'))).toBe(true)); + + quest.root.querySelector('#srFocusHelper').remove(); + accessibility.handleRadioCheckboxTableEvents({ + target: quest.root.querySelector('tr:last-child input'), + type: 'change', + preventDefault: vi.fn(), + }); + await vi.waitFor(() => expect(quest.errors.some(([message]) => message.includes('Focus helper not found'))).toBe(true)); + }); + + it('logs missing active-question and Next-button targets for final selections', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` + +
Only
+ `); + const event = { target: quest.root.querySelector('#ONLY'), type: 'change', preventDefault: vi.fn() }; + + accessibility.handleRadioCheckboxTableEvents(event); + await vi.waitFor(() => expect(quest.errors.some(([message]) => message === 'Active question not found')).toBe(true)); + + quest.root.insertAdjacentHTML('afterbegin', '
'); + accessibility.handleRadioCheckboxTableEvents(event); + await vi.waitFor(() => expect(quest.errors.some(([message]) => message === 'Next question button not found')).toBe(true)); + }); + + it('walks past non-response siblings when ArrowUp leaves a nested text field', async () => { + const { quest, accessibility } = await loadAccessibilityFixture(` +
spacing
+
+ `); + const current = quest.root.querySelector('#CURRENT'); + current.focus(); + + accessibility.handleUpDownArrowKeys({ key: 'ArrowUp', target: current, preventDefault: vi.fn() }); + + await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#PREVIOUS'))); + }); + + it('returns safely when announcer dependencies are absent and clears an existing region', async () => { + const { quest, accessibility } = await loadAccessibilityFixture('
'); + const response = quest.root.querySelector('.response'); + + expect(() => accessibility.updateAriaLiveSelectionAnnouncer(response)).not.toThrow(); + expect(() => accessibility.updateAriaLiveSelectionAnnouncerTable(response)).not.toThrow(); + expect(() => accessibility.clearSelectionAnnouncement()).not.toThrow(); + + quest.root.insertAdjacentHTML('beforeend', '
stale
'); + accessibility.clearSelectionAnnouncement(); + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toBe(''); + }); +}); diff --git a/tests/integration/eventHandlers.spec.js b/tests/integration/eventHandlers.spec.js new file mode 100644 index 0000000..1ee5682 --- /dev/null +++ b/tests/integration/eventHandlers.spec.js @@ -0,0 +1,174 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +const TEXT_SURVEY = ` +{"name":"EVENT_TEXT"} +[TEXT?] Enter a response. +|__|id=TEXT_VALUE minlen=2 maxlen=20| +[END,end] Done. +`; + +describe('delegated runtime event handling', () => { + it('captures input, focusout, Enter, and reset behavior at the Quest container boundary', async () => { + const quest = await renderFreshQuest({ markdown: TEXT_SURVEY }); + const input = quest.root.querySelector('#TEXT_VALUE'); + const form = input.form; + + const enter = new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + code: 'Enter', + key: 'Enter', + keyCode: 13, + }); + expect(input.dispatchEvent(enter)).toBe(false); + expect(enter.defaultPrevented).toBe(true); + + input.value = 'debounced value'; + input.dispatchEvent(new InputEvent('input', { bubbles: true, data: 'e', inputType: 'insertText' })); + await new Promise((resolve) => setTimeout(resolve, 300)); + expect(quest.state.getActiveQuestionState()).toEqual({}); + + input.value = 'focusout value'; + input.dispatchEvent(new FocusEvent('focusout', { bubbles: true })); + expect(quest.state.getActiveQuestionState().TEXT).toBe('focusout value'); + expect(input.getAttribute('style')).toContain('size: 20'); + + form.querySelector('.reset').click(); + expect(input.value).toBe(''); + expect(quest.state.getActiveQuestionState().TEXT).toBeUndefined(); + }); + + it('debounces nested Other text input and keeps its owning checkbox in sync', async () => { + const quest = await renderFreshQuest({ markdown: TEXT_SURVEY }); + const form = quest.root.querySelector('#TEXT'); + form.querySelector('fieldset').innerHTML = ` + Choose another response. +
+ +
+ `; + quest.state.setNumResponseInputs('TEXT', 2); + const checkbox = form.querySelector('#OTHER'); + const otherText = form.querySelector('#OTHER_TEXT'); + + otherText.value = 'synthetic detail'; + otherText.dispatchEvent(new InputEvent('input', { bubbles: true, data: 'l', inputType: 'insertText' })); + + await vi.waitFor(() => expect(checkbox.checked).toBe(true)); + expect(quest.state.getActiveQuestionState().TEXT).toEqual({ + OTHER_GROUP: ['99'], + OTHER_TEXT: 'synthetic detail', + }); + + otherText.value = ''; + otherText.dispatchEvent(new InputEvent('input', { bubbles: true, data: null, inputType: 'deleteContentBackward' })); + await vi.waitFor(() => expect(checkbox.checked).toBe(false)); + }); + + it('formats SSN and telephone keystrokes through delegated keyup listeners', async () => { + const quest = await renderFreshQuest({ markdown: TEXT_SURVEY }); + const form = quest.root.querySelector('#TEXT'); + const ssn = document.createElement('input'); + ssn.type = 'text'; + ssn.className = 'SSN'; + ssn.value = '12345'; + const phone = document.createElement('input'); + phone.type = 'tel'; + phone.value = '555555'; + form.querySelector('fieldset').append(ssn, phone); + + ssn.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, code: 'Digit5' })); + phone.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, code: 'Digit5' })); + + expect(ssn.value).toBe('123-45-'); + expect(phone.value).toBe('555-555-'); + }); + + it('updates the live selection announcement without requiring listeners on individual controls', async () => { + const quest = await renderFreshQuest(); + const radio = quest.root.querySelector('#Q1_2'); + + radio.click(); + radio.dispatchEvent(new Event('change', { bubbles: true })); + + await vi.waitFor(() => { + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Selected.'); + }); + + radio.checked = false; + radio.dispatchEvent(new Event('change', { bubbles: true })); + await vi.waitFor(() => { + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Unselected.'); + }); + }); + + it('builds a legend, a single hidden focus stop, and accessible break semantics', async () => { + const quest = await renderFreshQuest(); + const fieldset = quest.root.querySelector('#Q1 fieldset'); + + expect(fieldset.querySelector('legend.question-text')?.textContent).toContain('Choose one answer'); + expect(fieldset.querySelectorAll('.screen-reader-focus')).toHaveLength(1); + expect(fieldset.querySelector('.screen-reader-focus').tabIndex).toBe(0); + expect([...fieldset.querySelectorAll('br')].every((br) => br.getAttribute('aria-hidden') === 'true')).toBe(true); + expect(quest.root.querySelectorAll('#srAnnouncerContainer [aria-live="polite"]')).toHaveLength(2); + }); + + it('moves focus to the constructed screen-reader stop after a question transition', async () => { + const quest = await renderFreshQuest(); + quest.root.querySelector('#Q1_1').click(); + quest.root.querySelector('#Q1 .next').click(); + + await vi.waitFor(() => expect(quest.root.querySelector('form.active')?.id).toBe('Q2')); + await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#Q2 .screen-reader-focus')), { + timeout: 1_500, + interval: 25, + }); + }); + + it('keeps host controls outside the delegated event boundary unchanged', async () => { + const quest = await renderFreshQuest(); + const outside = document.querySelector('#afterQuest'); + const handler = vi.fn(); + outside.addEventListener('keydown', handler); + + outside.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, key: 'Enter', keyCode: 13 })); + + expect(handler).toHaveBeenCalledOnce(); + expect(quest.state.getActiveQuestionState()).toEqual({}); + expect(quest.calls.store).toEqual([]); + }); + + it('works with ordinary host capture and bubble observers around the embedded Quest root', async () => { + const quest = await renderFreshQuest(); + const radio = quest.root.querySelector('#Q1_2'); + const host = document.querySelector('#root'); + const captureObserver = vi.fn(); + const bubbleObserver = vi.fn(); + document.addEventListener('keydown', captureObserver, true); + host.addEventListener('keydown', bubbleObserver); + + try { + const space = new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: ' ', + code: 'Space', + }); + radio.dispatchEvent(space); + expect(captureObserver).toHaveBeenCalledWith(space); + expect(bubbleObserver).toHaveBeenCalledWith(space); + expect(space.defaultPrevented).toBe(false); + + radio.click(); + radio.dispatchEvent(new Event('change', { bubbles: true })); + await vi.waitFor(() => expect(quest.state.getActiveQuestionState().Q1).toBe('2')); + } finally { + document.removeEventListener('keydown', captureObserver, true); + host.removeEventListener('keydown', bubbleObserver); + } + }); +}); diff --git a/tests/integration/gridDeepCoverage.spec.js b/tests/integration/gridDeepCoverage.spec.js new file mode 100644 index 0000000..db22cb0 --- /dev/null +++ b/tests/integration/gridDeepCoverage.spec.js @@ -0,0 +1,258 @@ +import { existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +// This is the nine-row sleep grid from the locked production module2.txt +// corpus (commit 7ae99a22af325cf0e14be047a7636462db9bfd50). Keeping the authored +// IDs and response values makes the state-shape contract reviewable. +const PRODUCTION_SLEEP_GRID_SURVEY = ` +{"name":"TEST_PRODUCTION_GRID"} +[GRID_LEAD] The next question uses a production response grid. +|grid?|id="D_981441822"|What is the chance that you would doze off or fall asleep (not just "feel tired") in each of these situations? If you are never or rarely in the situation, please make your best guess for what would happen.|[ +[D_403155173] Sitting and reading; +[D_576621769] Watching television; +[D_988508028] Sitting inactive in public place (such as a theater or a meeting); [D_186488870] Riding as a passenger in a car for an hour without stopping; +[D_922388461] Lying down to rest in the afternoon; +[D_760686611] Sitting and talking to someone; +[D_354550061] Sitting quietly after a lunch that did not include alcohol; +[D_179705366] In a car, while you are stopped for a few minutes in traffic; +[D_955609858] At the dinner table;]| +(514068832:No chance) +(774439579:Slight Chance) +(747099514:Moderate Chance) +(977681388: High Chance)| +[END,end] Done. +`; + +const CHECKBOX_GRID_SURVEY = ` +{"name":"TEST_GRID_CHECKBOX_STATE"} +[GRID_LEAD] The next question uses a checkbox response grid. +|grid!|id="GRID_CHECKBOX_STATE"|Which supports apply?|[ +[ROW_PHONE] First need; +[ROW_EMAIL] Second need;]| +[1:Phone][2:Email]| +[END,end] Done. +`; + +// The two row conditions mirror the condition-driven symptom rows in the +// locked COVID module's D_114280729 grid, reduced to isolate completeness. +const CONDITIONAL_ROW_GRID_SURVEY = ` +{"name":"TEST_CONDITIONAL_GRID"} +[GRID_LEAD] The next question uses condition-driven production-style rows. +|grid?|id="GRID_CONDITIONAL"|How long did you experience the following symptoms?|[ +[D_374567479,displayif=equals(SHOW_TASTE,1)] Loss of taste or smell; +[D_966214244,displayif=equals(SHOW_FATIGUE,1)] Feeling generally more tired than you used to feel;]| +(232063618:Less than 1 month) +(948148236:Between 1 and 3 months) +(692824372:More than 3 months)| +[END,end] Done. +`; + +function validationGridSurvey(prompt) { + return ` +{"name":"TEST_${prompt === '!' ? 'HARD' : 'SOFT'}_GRID"} +[GRID_LEAD] The next question uses a required response grid. +|grid${prompt}|id="GRID_VALIDATION"|Rate both items.|[ +[ROW_ONE] First item; +[ROW_TWO] Second item;]| +(1:Never) +(2:Often)| +[END,end] Done. +`; +} + +const productionAlcoholFrequencyRows = [ + 'D_294629316', 'D_164707243', 'D_771426895', 'D_818310825', + 'D_843593800', 'D_175385712', 'D_772143730', 'D_602102163', +]; +const productionAlcoholCheckboxRows = [ + 'D_912659087', 'D_643512687', 'D_688123102', 'D_356133766', + 'D_690918725', 'D_178609656', 'D_261957180', 'D_715827646', +]; +const productionAlcoholCheckboxValues = ['789689151', '663253668', '104676242', '137733407']; +const corpusLock = JSON.parse(readFileSync(join(import.meta.dirname, '../corpus/lock.json'), 'utf8')); +const module3Path = join(import.meta.dirname, '../..', corpusLock.cacheRoot, corpusLock.commit, 'prod/module3.txt'); +const lockedModule3Markdown = existsSync(module3Path) ? readFileSync(module3Path, 'utf8') : null; + +function treeAt(questionID) { + return JSON.stringify({ + rootNode: { value: null, children: [{ value: questionID, children: [] }] }, + currentNode: questionID, + }); +} + +describe('deep grid state coverage', () => { + it('restores every independently keyed row in the locked production sleep grid', async () => { + const restoredRows = { + D_403155173: '774439579', + D_576621769: '747099514', + D_988508028: '977681388', + D_186488870: '514068832', + D_922388461: '774439579', + D_760686611: '747099514', + D_354550061: '977681388', + D_179705366: '514068832', + D_955609858: '774439579', + }; + const quest = await renderFreshQuest({ + markdown: PRODUCTION_SLEEP_GRID_SURVEY, + persistedData: { + D_981441822: restoredRows, + treeJSON: treeAt('D_981441822'), + }, + }); + const grid = quest.root.querySelector('#D_981441822'); + + expect(grid.dataset.grid).toBe('true'); + expect(grid.querySelectorAll('tr[data-gridrow="true"]')).toHaveLength(9); + expect(grid.querySelectorAll('th[scope="col"]')).toHaveLength(4); + for (const [rowId, value] of Object.entries(restoredRows)) { + expect(grid.querySelector(`input[name="${rowId}"][value="${value}"]`).checked).toBe(true); + } + expect(quest.state.getActiveQuestionState()).toEqual({ D_981441822: restoredRows }); + expect(quest.state.getResponseToQuestionMapping()).toMatchObject({ + 'D_403155173.D_981441822': 'D_981441822.D_403155173', + 'D_955609858.D_981441822': 'D_981441822.D_955609858', + }); + expect(quest.errors).toEqual([]); + }); + + it('tracks checkbox rows independently through delegated select, deselect, and reset flows', async () => { + const quest = await renderFreshQuest({ + markdown: CHECKBOX_GRID_SURVEY, + persistedData: { treeJSON: treeAt('GRID_CHECKBOX_STATE') }, + }); + const grid = quest.root.querySelector('#GRID_CHECKBOX_STATE'); + const phone = grid.querySelector('#ROW_PHONE_0'); + const email = grid.querySelector('#ROW_EMAIL_1'); + + phone.click(); + email.click(); + expect(quest.state.getActiveQuestionState()).toEqual({ + GRID_CHECKBOX_STATE: { + ROW_PHONE: ['1'], + ROW_EMAIL: ['2'], + }, + }); + + phone.click(); + expect(phone.checked).toBe(false); + expect(email.checked).toBe(true); + expect(quest.state.getCache()['ROW_PHONE.GRID_CHECKBOX_STATE']).toBeUndefined(); + expect(quest.state.getResponseToQuestionMapping()['ROW_PHONE.GRID_CHECKBOX_STATE']).toBeUndefined(); + + grid.querySelector('button.reset').click(); + expect(grid.querySelectorAll('input[type="checkbox"]:checked')).toHaveLength(0); + expect(quest.state.getActiveQuestionState().GRID_CHECKBOX_STATE).toBeUndefined(); + expect(quest.errors).toEqual([]); + }); + + it('excludes hidden production-style conditional rows from required grid completeness', async () => { + const quest = await renderFreshQuest({ + markdown: CONDITIONAL_ROW_GRID_SURVEY, + persistedData: { + SHOW_TASTE: '1', + SHOW_FATIGUE: '0', + treeJSON: treeAt('GRID_CONDITIONAL'), + }, + }); + const grid = quest.root.querySelector('#GRID_CONDITIONAL'); + const visibleRow = grid.querySelector('[data-question-id="D_374567479"]'); + const hiddenRow = grid.querySelector('[data-question-id="D_966214244"]'); + + expect(visibleRow.style.display).not.toBe('none'); + expect(hiddenRow.style.display).toBe('none'); + expect(hiddenRow.dataset.hidden).toBe('true'); + visibleRow.querySelector('input[value="232063618"]').click(); + grid.querySelector('button.next').click(); + + await vi.waitFor(() => expect(quest.root.querySelector('form.question.active')?.id).toBe('END')); + expect(quest.root.querySelector('#softModal').classList.contains('show')).toBe(false); + expect(quest.errors).toEqual([]); + }); + + it.each([ + ['?', 'softModal'], + ['!', 'hardModal'], + ])('shows the %s grid validation state before an unanswered grid can advance', async (prompt, modalId) => { + const quest = await renderFreshQuest({ + markdown: validationGridSurvey(prompt), + persistedData: { treeJSON: treeAt('GRID_VALIDATION') }, + }); + const grid = quest.root.querySelector('#GRID_VALIDATION'); + + grid.querySelector('button.next').click(); + await vi.waitFor(() => expect(quest.root.querySelector(`#${modalId}`).classList.contains('show')).toBe(true)); + expect(quest.root.querySelector(`#${modalId} [role="alert"]`)).not.toBeNull(); + expect(quest.root.querySelector('form.question.active')?.id).toBe('GRID_VALIDATION'); + expect(quest.errors).toEqual([]); + }); + + it.skipIf(!lockedModule3Markdown)('stores and restores independently selected arrays in the locked production Module 3 checkbox grid', async () => { + const markdown = lockedModule3Markdown; + const seededState = { + D_141874857: '16', + D_480426504: '24', + D_633553324: { + D_294629316: '950039557', + D_164707243: '402048066', + }, + treeJSON: treeAt('D_470862706'), + }; + const quest = await renderFreshQuest({ markdown, persistedData: seededState }); + const grid = quest.root.querySelector('#D_470862706'); + const visibleRows = Array.from(grid.querySelectorAll('tr[data-gridrow="true"]')) + .filter((row) => row.style.display !== 'none'); + + expect(visibleRows.map((row) => row.dataset.questionId)).toEqual(['D_912659087', 'D_643512687']); + expect(grid.querySelectorAll('tr[data-gridrow="true"][data-hidden="true"]')).toHaveLength(6); + expect(grid.querySelectorAll('[data-gridreplace]')).not.toHaveLength(0); + expect(grid.querySelectorAll('input[type="checkbox"]')).toHaveLength(32); + + grid.querySelector('input[name="D_912659087"][value="789689151"]').click(); + grid.querySelector('input[name="D_912659087"][value="104676242"]').click(); + grid.querySelector('input[name="D_643512687"][value="663253668"]').click(); + const expectedRows = { + D_912659087: ['789689151', '104676242'], + D_643512687: ['663253668'], + }; + expect(quest.state.getActiveQuestionState()).toEqual({ D_470862706: expectedRows }); + + grid.querySelector('button.next').click(); + await vi.waitFor(() => expect(quest.root.querySelector('form.question.active')?.id).toBe('INTROSE')); + const storedState = quest.state.getSurveyState(); + expect(storedState).toMatchObject({ D_470862706: expectedRows }); + expect(quest.calls.store.at(-1)['D_965707586.D_470862706']).toEqual(expectedRows); + + const restored = await renderFreshQuest({ + markdown, + persistedData: { ...storedState, treeJSON: treeAt('D_470862706') }, + }); + const restoredGrid = restored.root.querySelector('#D_470862706'); + for (const [rowId, values] of Object.entries(expectedRows)) { + for (const value of values) { + expect(restoredGrid.querySelector(`input[name="${rowId}"][value="${value}"]`).checked).toBe(true); + } + } + expect(restoredGrid.querySelectorAll('tr[data-gridrow="true"][data-hidden="true"]')).toHaveLength(6); + expect(restored.errors).toEqual([]); + }); + + it('keeps Module 3 English and Spanish production checkbox-grid IDs and axes in parity', () => { + const catalog = JSON.parse(readFileSync(join(import.meta.dirname, '../corpus/structuralCatalog.json'), 'utf8')); + const variants = catalog.surveys + .filter(({ module, locale }) => module === 'module3' && ['en', 'es'].includes(locale)) + .map(({ locale, grids }) => ({ locale, grid: grids.find(({ questionId }) => questionId === 'D_470862706') })); + + expect(variants).toHaveLength(2); + for (const { grid } of variants) { + expect(grid).toMatchObject({ + rowCount: 8, + rowQuestionIds: productionAlcoholCheckboxRows, + responseTypes: ['checkbox'], + responseValues: productionAlcoholCheckboxValues, + }); + } + }); +}); diff --git a/tests/integration/hostFailures.spec.js b/tests/integration/hostFailures.spec.js new file mode 100644 index 0000000..ddc7a39 --- /dev/null +++ b/tests/integration/hostFailures.spec.js @@ -0,0 +1,40 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +async function answerAndAdvance(quest) { + quest.root.querySelector('#Q1_1').click(); + quest.root.querySelector('#Q1 .next').click(); + await vi.waitFor(() => expect(quest.store).toHaveBeenCalled()); +} + +describe('host boundary success, delay, and failure behavior', () => { + it('advances immediately while a delayed successful host write settles', async () => { + const quest = await renderFreshQuest({ storeDelay: 150 }); + + await answerAndAdvance(quest); + expect(quest.root.querySelector('form.active')?.id).toBe('Q2'); + await vi.waitFor(() => expect(quest.calls.store).toHaveLength(1)); + expect(quest.errors).toEqual([]); + }); + + it.each(['non200', 'reject'])('rolls back navigation and shows a recoverable modal after a %s store result', async (storeMode) => { + const quest = await renderFreshQuest({ storeMode }); + + await answerAndAdvance(quest); + await vi.waitFor(() => expect(quest.root.querySelector('form.active')?.id).toBe('Q1')); + + expect(quest.root.querySelector('#storeErrorModal').classList).toContain('show'); + expect(quest.errors.flat().join(' ')).toContain('Error syncing state to store'); + }); + + it('logs a rejected retrieve operation and still starts a clean survey', async () => { + const retrieve = vi.fn(async () => { + throw new Error('Configured retrieve rejection'); + }); + const quest = await renderFreshQuest({ params: { retrieve } }); + + expect(quest.rendered).toBe(true); + expect(quest.root.querySelector('form.active')?.id).toBe('Q1'); + expect(quest.errors.flat().join(' ')).toContain('Error fetching retrieve function and css'); + }); +}); diff --git a/tests/integration/mainRender.spec.js b/tests/integration/mainRender.spec.js new file mode 100644 index 0000000..ab09847 --- /dev/null +++ b/tests/integration/mainRender.spec.js @@ -0,0 +1,186 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest, SIMPLE_SURVEY } from '../helpers/questRuntime.js'; + +describe('transform.render', () => { + const resumedAtQ1 = JSON.stringify({ + rootNode: { value: null, children: [{ value: 'Q1', children: [] }] }, + currentNode: 'Q1', + }); + + it('renders an embedded survey through the public API with host-owned callbacks', async () => { + const quest = await renderFreshQuest(); + + expect(quest.rendered).toBe(true); + expect(quest.moduleParams.questName).toBe('TEST_MODULE'); + expect(quest.root.querySelector('#softModal')).not.toBeNull(); + expect(quest.root.querySelector('#progressBar')).not.toBeNull(); + expect(quest.root.querySelectorAll('form.question')).toHaveLength(1); + expect(quest.root.querySelector('form.active')?.id).toBe('Q1'); + expect(quest.root.querySelectorAll('input[type="radio"]')).toHaveLength(2); + expect(quest.errors).toEqual([]); + }); + + it('renders all questions in renderer full-list mode', async () => { + const quest = await renderFreshQuest({ + params: { isRenderer: true, activate: false, showProgressBarInQuest: false }, + }); + + expect(quest.rendered).toBe(true); + expect(quest.moduleParams.renderFullQuestionList).toBe(true); + expect(quest.root.querySelectorAll('form.question').length).toBeGreaterThanOrEqual(3); + expect([...quest.root.querySelectorAll('form.question')].map(({ id }) => id)).toEqual( + expect.arrayContaining(['Q1', 'Q2', 'END']), + ); + expect(quest.root.querySelector('#progressBar')).toBeNull(); + }); + + it('uses prefetched survey data without invoking retrieve', async () => { + const quest = await renderFreshQuest({ + persistedData: { Q1: '2', treeJSON: resumedAtQ1 }, + retrieveResult: { data: { TEST_MODULE: { Q1: '1' } } }, + }); + + expect(quest.retrieve).not.toHaveBeenCalled(); + expect(quest.state.getSurveyState().Q1).toBe('2'); + expect(quest.root.querySelector('#Q1_2').checked).toBe(true); + }); + + it('uses the exact version-pinned Quest stylesheets for a Connect-hosted prefetched render', async () => { + const requestedUrls = []; + const fetchStub = vi.fn(async (request) => { + requestedUrls.push(String(request)); + return { text: async () => `/* ${String(request)} */` }; + }); + vi.stubGlobal('fetch', fetchStub); + + try { + const quest = await renderFreshQuest({ + persistedData: { Q1: '2', treeJSON: resumedAtQ1 }, + params: { + url: 'https://questionnaire.test/prod/moduleExample.txt', + questVersion: '2.7.4', + }, + }); + + expect(quest.rendered).toBe(true); + expect(quest.retrieve).not.toHaveBeenCalled(); + expect(requestedUrls).toEqual([ + 'https://cdn.jsdelivr.net/gh/episphere/quest@v2.7.4/ActiveLogic.css', + 'https://cdn.jsdelivr.net/gh/episphere/quest@v2.7.4/Style1.css', + ]); + expect(document.head.querySelectorAll('link[rel="stylesheet"][href="blob:quest-test"]')).toHaveLength(2); + expect(quest.errors).toEqual([]); + } finally { + document.head.querySelectorAll('link[href="blob:quest-test"]').forEach((link) => link.remove()); + vi.unstubAllGlobals(); + } + }); + + it('unwraps a single retrieve payload and restores its active response', async () => { + const quest = await renderFreshQuest({ + retrieveResult: { data: { TEST_MODULE: { Q1: '1', treeJSON: resumedAtQ1 } } }, + }); + + expect(quest.retrieve).toHaveBeenCalledOnce(); + expect(quest.state.getSurveyState().Q1).toBe('1'); + expect(quest.root.querySelector('#Q1_1').checked).toBe(true); + }); + + it('delegates radio changes, persists a namespaced payload, and advances', async () => { + const quest = await renderFreshQuest(); + const radio = quest.root.querySelector('#Q1_2'); + radio.click(); + radio.dispatchEvent(new Event('change', { bubbles: true })); + + quest.root.querySelector('#Q1 .next').click(); + await vi.waitFor(() => expect(quest.root.querySelector('form.active')?.id).toBe('Q2')); + await vi.waitFor(() => expect(quest.store).toHaveBeenCalled()); + + expect(quest.calls.store[0]['TEST_MODULE.Q1']).toBe('2'); + expect(quest.calls.store[0]['TEST_MODULE.treeJSON']).toBeTypeOf('string'); + }); + + it('returns false and reports malformed survey input without throwing to the host', async () => { + const quest = await renderFreshQuest({ markdown: 'not a questionnaire' }); + + expect(quest.rendered).toBe(false); + expect(quest.errors.length).toBeGreaterThan(0); + }); + + it('keeps previous-result lookups available to conditions without merging them into survey state', async () => { + const markdown = ` + {"name":"PREVIOUS_RESULTS"} + [Q1,displayif=equals(EXTERNAL_FLAG,1)] Visible when prior data matches. + [END] Done. + `; + const quest = await renderFreshQuest({ markdown, previousResults: { EXTERNAL_FLAG: '1' } }); + + expect(quest.root.querySelector('form.active')?.id).toBe('Q1'); + expect(quest.state.getSurveyState()).not.toHaveProperty('EXTERNAL_FLAG'); + }); + + it('reinitializes survey state when the public render boundary is called sequentially', async () => { + const quest = await renderFreshQuest(); + quest.root.querySelector('#Q1_1').click(); + expect(quest.state.getActiveQuestionState()).toEqual({ Q1: '1' }); + + document.body.innerHTML = '
'; + const rendered = await quest.transform.render({ + activate: true, + text: SIMPLE_SURVEY.replace('TEST_MODULE', 'SECOND_MODULE'), + store: vi.fn(async () => ({ code: 200 })), + errorLogger: () => {}, + }, 'secondRoot'); + + expect(rendered).toBe(true); + expect(quest.moduleParams.questName).toBe('SECOND_MODULE'); + expect(document.querySelector('#secondRoot form.active')?.id).toBe('Q1'); + expect(quest.state.getSurveyState()).toEqual({}); + expect(quest.state.getActiveQuestionState()).toEqual({}); + }); + + it('does not let a pending delegated input debounce mutate a sequential render', async () => { + const firstMarkdown = ` + {"name":"FIRST_DEBOUNCE"} + [OLD?] Choose a response. + [99] Other [text box:OLD_OTHER_TEXT] + [END,end] Done. + `; + const quest = await renderFreshQuest({ markdown: firstMarkdown }); + const oldText = quest.root.querySelector('#OLD_OTHER_TEXT'); + const secondStore = vi.fn(async () => ({ code: 200 })); + const secondErrors = vi.fn(); + + vi.useFakeTimers(); + try { + oldText.value = 'stale response'; + oldText.dispatchEvent(new InputEvent('input', { + bubbles: true, + data: 'e', + inputType: 'insertText', + })); + + document.body.innerHTML = '
'; + const rendered = await quest.transform.render({ + activate: true, + text: SIMPLE_SURVEY.replace('TEST_MODULE', 'SECOND_DEBOUNCE'), + store: secondStore, + errorLogger: secondErrors, + }, 'secondRoot'); + + expect(rendered).toBe(true); + expect(quest.state.getSurveyState()).toEqual({}); + expect(quest.state.getActiveQuestionState()).toEqual({}); + + await vi.advanceTimersByTimeAsync(251); + + expect(quest.state.getSurveyState()).toEqual({}); + expect(quest.state.getActiveQuestionState()).toEqual({}); + expect(secondStore).not.toHaveBeenCalled(); + expect(secondErrors).not.toHaveBeenCalled(); + } finally { + vi.useRealTimers(); + } + }); + +}); diff --git a/tests/integration/offlineBoundary.spec.js b/tests/integration/offlineBoundary.spec.js new file mode 100644 index 0000000..8e0d13e --- /dev/null +++ b/tests/integration/offlineBoundary.spec.js @@ -0,0 +1,19 @@ +import { describe, expect, it, vi } from 'vitest'; + +describe('jsdom offline network boundary', () => { + it('installs deny-by-default fetch and XMLHttpRequest implementations', () => { + expect(globalThis.fetch.questDenyByDefault).toBe(true); + expect(globalThis.XMLHttpRequest.questDenyByDefault).toBe(true); + }); + + it('allows a test to replace fetch only with an explicit host-boundary stub', async () => { + const hostBoundary = vi.fn(async () => ({ ok: true, status: 200 })); + vi.stubGlobal('fetch', hostBoundary); + + await expect(fetch('https://synthetic-host.test/fixture')).resolves.toMatchObject({ + ok: true, + status: 200, + }); + expect(hostBoundary).toHaveBeenCalledWith('https://synthetic-host.test/fixture'); + }); +}); diff --git a/tests/integration/productionLoopCoverage.spec.js b/tests/integration/productionLoopCoverage.spec.js new file mode 100644 index 0000000..df62e87 --- /dev/null +++ b/tests/integration/productionLoopCoverage.spec.js @@ -0,0 +1,218 @@ +import { readFileSync } from 'node:fs'; +import path from 'node:path'; + +import { describe, expect, it, vi } from 'vitest'; + +const repositoryRoot = path.resolve(import.meta.dirname, '../..'); +const corpusRoot = path.join( + repositoryRoot, + '.cache/questionnaire/7ae99a22af325cf0e14be047a7636462db9bfd50/prod', +); + +const PRECALCULATED = { + current_date: new Date('2026-03-15T12:00:00Z'), + current_day: 15, + current_month: 3, + current_month_str: 'March', + current_year: 2026, + quest_format_date: '2026-3-15', +}; + +const LOOP_CASES = [ + { + label: 'Module 1 siblings', + file: 'module1.txt', + countId: 'D_694265648', + firstId: 'D_406098499', + earlyExitId: 'D_607773106', + loopIndex: 1, + afterLoopId: 'CHILD', + minimum: 0, + maximum: 25, + }, + { + label: 'Module 1 children', + file: 'module1.txt', + countId: 'D_446999144', + firstId: 'D_714001034', + earlyExitId: 'D_718867914', + loopIndex: 2, + afterLoopId: 'SECTION5', + minimum: 0, + maximum: 25, + }, + { + label: 'COVID illnesses', + file: 'moduleCOVID19.txt', + countId: 'D_860011428', + firstId: 'D_980800222_V2', + earlyExitId: 'SRVCOV_COVSUMMARY_V1R0', + loopIndex: 1, + afterLoopId: 'COV19_SKIP', + minimum: 1, + maximum: 25, + }, + { + label: 'COVID vaccinations', + file: 'moduleCOVID19.txt', + countId: 'D_877074400_V2', + firstId: 'D_715581797_V2', + earlyExitId: 'SRVCOV_COV29_V1R0', + loopIndex: 2, + afterLoopId: 'END', + minimum: 1, + maximum: 10, + }, +]; + +function lockedMarkdown(file) { + return readFileSync(path.join(corpusRoot, file), 'utf8'); +} + +function localizedFile(loop, language) { + if (language === 'en') return loop.file; + return loop.file === 'module1.txt' ? 'module1Spanish.txt' : 'moduleCOVID19Spanish.txt'; +} + +function exactQuestionIndex(processor, id) { + return processor.questions.findIndex(({ questionIDExactSearch }) => questionIDExactSearch === id); +} + +async function createProcessor(markdown, initialState = {}, language = 'en') { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + const i18n = (await import(`../../i18n/${language}.js`)).default; + questionnaire.moduleParams.i18n = i18n; + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = {}; + questionnaire.moduleParams.asyncQuestionsMap = {}; + questionnaire.moduleParams.renderFullQuestionList = true; + questionnaire.moduleParams.isRenderer = true; + + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + const state = stateModule.getStateManager(); + state.loadInitialSurveyState(initialState); + + const { initializeCustomMathJSFunctions } = await import('../../customMathJSImplementation.js'); + initializeCustomMathJSFunctions(); + const { QuestionProcessor } = await import('../../questionProcessor.js'); + const processor = new QuestionProcessor(markdown, PRECALCULATED, i18n); + state.setQuestionProcessor(processor); + return { processor, state }; +} + +function prepareLoop(processor, firstId) { + const firstIndex = exactQuestionIndex(processor, `${firstId}_1_1`); + expect(firstIndex, `${firstId} should be expanded`).toBeGreaterThanOrEqual(0); + processor.processQuestion(firstIndex); + processor.setCurrentQuestionIndex('update', firstIndex); + return firstIndex; +} + +function continuationId(loopIndex, iteration) { + return `_CONTINUE${loopIndex}_${iteration}_${iteration}`; +} + +describe('locked production loop expansion and navigation', () => { + it.each(['en', 'es'])('keeps Module 1 and COVID loop definitions aligned in %s', async (language) => { + const module1File = language === 'en' ? 'module1.txt' : 'module1Spanish.txt'; + const covidFile = language === 'en' ? 'moduleCOVID19.txt' : 'moduleCOVID19Spanish.txt'; + const module1 = await createProcessor(lockedMarkdown(module1File), {}, language); + const covid = await createProcessor(lockedMarkdown(covidFile), {}, language); + + for (const loop of LOOP_CASES) { + const processor = loop.file === 'module1.txt' ? module1.processor : covid.processor; + const first = processor.processQuestion(exactQuestionIndex(processor, `${loop.firstId}_1_1`)); + const last = processor.processQuestion(exactQuestionIndex(processor, `${loop.firstId}_25_25`)); + + expect(first.id).toBe(`${loop.firstId}_1_1`); + expect(last.id).toBe(`${loop.firstId}_25_25`); + expect(first.getAttribute('firstquestion')).toBe('1'); + expect(first.getAttribute('loopmax')).toBe(loop.countId); + expect(first.getAttribute('loopindx')).toBe(String(loop.loopIndex)); + const countControl = processor.processQuestion(exactQuestionIndex(processor, loop.countId)) + .querySelector('input[type="number"]'); + expect(countControl).not.toBeNull(); + expect(Number(countControl.min)).toBe(loop.minimum); + expect(countControl.max).toBe(loop.maximum === 25 && loop.countId === 'D_860011428' ? '' : String(loop.maximum)); + } + }); + + it.each(LOOP_CASES)('$label respects valid participant bounds in English and Spanish', async (loop) => { + const validCounts = [...new Set([loop.minimum, 1, 2, loop.maximum])].sort((left, right) => left - right); + for (const language of ['en', 'es']) { + for (const count of validCounts) { + const { processor } = await createProcessor( + lockedMarkdown(localizedFile(loop, language)), + { [loop.countId]: String(count) }, + language, + ); + prepareLoop(processor, loop.firstId); + + const firstContinuation = processor.findQuestion(continuationId(loop.loopIndex, 1)); + expect(firstContinuation.question, `${loop.label}, ${language}, count ${count}`).not.toBeNull(); + + if (count < 2) { + expect(firstContinuation.question.id).toBe(loop.afterLoopId); + } else { + expect(firstContinuation.question.id).toBe(`${loop.firstId}_2_2`); + } + + const lastIndex = exactQuestionIndex(processor, `${loop.firstId}_${loop.maximum}_${loop.maximum}`); + processor.setCurrentQuestionIndex('update', lastIndex); + expect(processor.findQuestion(continuationId(loop.loopIndex, loop.maximum)).question.id).toBe(loop.afterLoopId); + } + } + }); + + it('keeps the COVID vaccination copies 11 through 25 outside valid participant navigation', async () => { + const vaccineLoop = LOOP_CASES.find(({ label }) => label === 'COVID vaccinations'); + const { processor } = await createProcessor(lockedMarkdown(vaccineLoop.file), { + [vaccineLoop.countId]: String(vaccineLoop.maximum), + }); + prepareLoop(processor, vaccineLoop.firstId); + + const finalValidIndex = exactQuestionIndex( + processor, + `${vaccineLoop.firstId}_${vaccineLoop.maximum}_${vaccineLoop.maximum}`, + ); + processor.setCurrentQuestionIndex('update', finalValidIndex); + expect(processor.findQuestion(continuationId(vaccineLoop.loopIndex, vaccineLoop.maximum)).question.id) + .toBe(vaccineLoop.afterLoopId); + + expect(exactQuestionIndex(processor, `${vaccineLoop.firstId}_11_11`)).toBeGreaterThan(finalValidIndex); + expect(exactQuestionIndex(processor, `${vaccineLoop.firstId}_25_25`)).toBeGreaterThan(finalValidIndex); + }); + + it.each(LOOP_CASES)('$label routes an authored early exit to the next iteration', async (loop) => { + const { processor } = await createProcessor(lockedMarkdown(loop.file), { [loop.countId]: '2' }); + prepareLoop(processor, loop.firstId); + const earlyExitIndex = exactQuestionIndex(processor, `${loop.earlyExitId}_1_1`); + expect(earlyExitIndex, `${loop.earlyExitId} should be expanded`).toBeGreaterThanOrEqual(0); + processor.setCurrentQuestionIndex('update', earlyExitIndex); + + expect(processor.findQuestion(continuationId(loop.loopIndex, 1)).question.id) + .toBe(`${loop.firstId}_2_2`); + }); + + it.each(LOOP_CASES)('$label reconstructs loop state from a persisted second iteration without losing suffixed response keys', async (loop) => { + const initialState = { + [loop.countId]: '2', + [`${loop.firstId}_1_1`]: 'first response', + [`${loop.firstId}_2_2`]: 'second response', + }; + const { processor, state } = await createProcessor(lockedMarkdown(loop.file), initialState); + const secondIndex = exactQuestionIndex(processor, `${loop.firstId}_2_2`); + processor.setCurrentQuestionIndex('update', secondIndex); + + expect(processor.loopDataArr).toEqual([]); + expect(processor.getLoopData()).toMatchObject({ + loopMaxQuestionID: loop.countId, + loopMaxResponse: 2, + loopFirstQuestionID: loop.firstId, + }); + expect(state.getSurveyState()).toMatchObject(initialState); + expect(state.getSurveyState()).not.toHaveProperty(loop.firstId); + }); +}); diff --git a/tests/integration/questionProcessor.spec.js b/tests/integration/questionProcessor.spec.js new file mode 100644 index 0000000..42708d9 --- /dev/null +++ b/tests/integration/questionProcessor.spec.js @@ -0,0 +1,677 @@ +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { describe, expect, it, vi } from 'vitest'; + +const ALL_CONSTRUCTS = readFileSync( + resolve('tests/fixtures/canonical/allConstructs.txt'), + 'utf8', +); + +const PRECALCULATED = { + current_date: new Date('2026-03-15T12:00:00Z'), + current_day: 15, + current_month: 3, + current_month_str: 2, + current_year: 2026, + quest_format_date: '2026-3-15', + firstName: 'Synthetic', +}; + +async function createProcessor(markdown, initialState = {}, options = {}) { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + const language = options.language ?? 'en'; + const i18n = (await import(`../../i18n/${language}.js`)).default; + questionnaire.moduleParams.i18n = i18n; + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = options.previousResults ?? {}; + questionnaire.moduleParams.asyncQuestionsMap = options.asyncQuestionsMap ?? {}; + questionnaire.moduleParams.renderFullQuestionList = options.renderFullQuestionList ?? true; + questionnaire.moduleParams.isRenderer = options.isRenderer ?? true; + + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + const state = stateModule.getStateManager(); + state.loadInitialSurveyState(initialState); + + const { initializeCustomMathJSFunctions } = await import('../../customMathJSImplementation.js'); + initializeCustomMathJSFunctions(); + const { QuestionProcessor } = await import('../../questionProcessor.js'); + const processor = new QuestionProcessor(markdown, PRECALCULATED, i18n); + state.setQuestionProcessor(processor); + return { processor, state, moduleParams: questionnaire.moduleParams }; +} + +function processById(processor, id) { + return processor.findQuestion(id).question; +} + +describe('QuestionProcessor constructs', () => { + it('removes comments, captures the module name, and preserves hard/soft/plain semantics', async () => { + const { processor, moduleParams } = await createProcessor(` + // line comment + {"name":"PROCESSOR_TEST"} + /* block comment */ + [SOFT?] Optional response. + (1) Yes + [HARD!] Required response. + [1] Choice + [PLAIN] Information only. + [END,end] Done. + `); + + expect(moduleParams.questName).toBe('PROCESSOR_TEST'); + expect(processor.questions.map(({ questionID }) => questionID)).toEqual(['SOFT?', 'HARD!', 'PLAIN', 'END']); + expect(processById(processor, 'SOFT').getAttribute('softedit')).toBe('true'); + expect(processById(processor, 'HARD').getAttribute('hardedit')).toBe('true'); + expect(processById(processor, 'PLAIN').querySelectorAll('input')).toHaveLength(0); + }); + + it('renders every scalar input family with stable IDs, types, descriptions, and limits', async () => { + const { processor } = await createProcessor(` + {"name":"INPUT_TYPES"} + [TEXT?] Text |__|id=TEXT_VALUE minlen=2 maxlen=8| + [NUMBER?] Number |__|__|id=NUMBER_VALUE min=1 max=10| + [AREA?] Notes |___|NOTES| + [EMAIL?] Email |@|id=EMAIL_VALUE| + [PHONE?] Phone |tel|id=PHONE_VALUE| + [FULLSSN?] SSN |SSN|id=FULL_SSN| + [SMALLSSN?] Last four |SSNsm|id=SMALL_SSN| + [ZIP?] Zip |zip|id=ZIP_VALUE| + [STATE?] State |state|id=STATE_VALUE| + [DATE?] Date |date|id=DATE_VALUE min=2020-01-01 max=2030-12-31| + [MONTH?] Month |month|id=MONTH_VALUE min=2020-01 max=2030-12| + [TIME?] Time |time|id=TIME_VALUE| + [HIDDEN] Hidden |hidden|id=HIDDEN_VALUE| + [END,end] Done. + `); + + processor.processAllQuestions(); + const forms = [...processor.getAllProcessedQuestions().values()]; + const all = document.createElement('div'); + forms.forEach((form) => all.append(form)); + + expect(all.querySelector('#TEXT_VALUE')).toMatchObject({ type: 'text' }); + expect(all.querySelector('#TEXT_VALUE').dataset).toMatchObject({ minlen: '2', maxlen: '8' }); + expect(all.querySelector('#NUMBER_VALUE')).toMatchObject({ type: 'number', min: '1', max: '10' }); + expect(all.querySelector('#NUMBER_VALUE').dataset).toMatchObject({ min: '1', max: '10' }); + expect(all.querySelector('#NOTES').tagName).toBe('TEXTAREA'); + expect(all.querySelector('#EMAIL_VALUE').type).toBe('email'); + expect(all.querySelector('#PHONE_VALUE').type).toBe('tel'); + expect(all.querySelector('#FULL_SSN').classList).toContain('SSN'); + expect(all.querySelector('#SMALL_SSN').classList).toContain('SSNsm'); + expect(all.querySelector('#ZIP_VALUE').classList).toContain('zipcode'); + expect(all.querySelector('#STATE_VALUE').querySelectorAll('option').length).toBeGreaterThan(50); + expect(all.querySelector('#DATE_VALUE').getAttribute('aria-describedby')).toBe('DATE_VALUE-desc'); + expect(all.querySelector('#MONTH_VALUE').dataset.minDateUneval).toBe('2020-01'); + expect(all.querySelector('#TIME_VALUE').getAttribute('aria-label')).toBe('Enter Time'); + expect(all.querySelector('#HIDDEN_VALUE').dataset.hidden).toBe('true'); + }); + + it('renders radios, checkboxes, reset choices, named groups, labels, and yes/no macros', async () => { + const { processor } = await createProcessor(` + {"name":"CHOICES"} + [RADIO?] Pick one. + (1) One + (2:NAMED|CUSTOM_LABEL) Two + [CHECK?] Pick many. + [1] First + [99*] None + [YN?] Answer. #YN + [YNP?] Answer. #YNP + [END,end] Done. + `); + + const radio = processById(processor, 'RADIO'); + const check = processById(processor, 'CHECK'); + const yn = processById(processor, 'YN'); + const ynp = processById(processor, 'YNP'); + + expect(radio.querySelectorAll('input[type="radio"]')).toHaveLength(2); + expect(radio.querySelector('#NAMED_2').name).toBe('NAMED'); + expect(radio.querySelector('label[for="NAMED_2"]').id).toBe('CUSTOM_LABEL'); + expect(check.querySelectorAll('input[type="checkbox"]')).toHaveLength(2); + expect(check.querySelector('#CHECK_99').dataset.reset).toBe('true'); + expect(yn.querySelectorAll('[role="radiogroup"] input')).toHaveLength(2); + expect(ynp.querySelectorAll('[role="radiogroup"] input')).toHaveLength(3); + }); + + it('renders grids, inline conditions, piped values, expressions, popovers, images, and hidden skips', async () => { + const { processor } = await createProcessor(` + {"name":"COMPOSITES"} + [INTRO] Hello {$u:firstName}; saved {$SAVED:missing}; result {#1+1}. + |displayif=equals(SHOW,1)|Visible text| + |popup|More|Help|Synthetic help text| + |image|example.org/test.png|40,80| + < |if=equals(SHOW,1)| -> TARGET > + [GRID_LEAD] Rate each. + |grid?|id="GRID"|Frequency|[ROW_A] Alpha;[ROW_B] Beta;|(1: Never)(2: Often)| + [TARGET] Target. + [END,end] Done. + `); + + const intro = processById(processor, 'INTRO'); + processor.processAllQuestions(); + const grid = processById(processor, 'GRID'); + + expect(intro.querySelector('[name="firstName"]').textContent).toBe('Synthetic'); + expect(intro.querySelector('[forid="SAVED"]').getAttribute('optional')).toBe(encodeURIComponent('missing')); + expect(intro.querySelector('[data-encoded-expression]')).not.toBeNull(); + expect(intro.querySelector('.displayif').getAttribute('displayif')).toBe('equals(SHOW,1)'); + expect(intro.querySelector('[data-bs-toggle="popover"]').getAttribute('data-bs-content')).toBe('Synthetic help text'); + expect(intro.querySelector('img').src).toBe('https://example.org/test.png'); + expect(intro.querySelector('input[type="hidden"]').getAttribute('skipto')).toBe('TARGET'); + expect(grid.dataset.grid).toBe('true'); + expect(grid.querySelectorAll('tbody tr')).toHaveLength(2); + expect(grid.querySelectorAll('input[type="radio"]')).toHaveLength(4); + }); + + it('replaces fixed date tags deterministically', async () => { + const { processor } = await createProcessor(` + {"name":"DATES"} + [Q] #currentYear #currentMonth #today #today + 2 #today - 20. + [END,end] Done. + `); + const form = processById(processor, 'Q'); + + expect(form.textContent.replace(/\s+/g, ' ')).toContain('2026 3 2026-3-15 2026-3-17 2026-2-23'); + }); + + it('unrolls loop boundaries with deterministic IDs and loop metadata', async () => { + const { processor } = await createProcessor(` + {"name":"LOOPS"} + [COUNT?] Count |__|__|id=D_123456789 min=0 max=2| + + [ITEM?,displayif=greaterThanOrEqual(D_123456789,#loop)] Enter the {##} item. + |__|id=ITEM_VALUE| + + [END,end] Done. + `, { D_123456789: '2' }); + + const ids = processor.questions.map(({ questionIDExactSearch }) => questionIDExactSearch); + expect(ids).toEqual(['COUNT', 'ITEM_1_1', 'ITEM_2_2', 'END_OF_LOOP', 'END']); + const first = processById(processor, 'ITEM_1_1'); + const second = processById(processor, 'ITEM_2_2'); + expect(first.textContent).toContain('1st item'); + expect(second.textContent).toContain('2nd item'); + expect(first.getAttribute('firstquestion')).toBe('1'); + expect(second.getAttribute('firstquestion')).toBe('2'); + expect(first.getAttribute('loopmax')).toBe('D_123456789'); + }); + + it('renders the complete construct inventory through a reset full module graph', async () => { + vi.spyOn(console, 'warn').mockImplementation(() => {}); + const { processor, moduleParams } = await createProcessor(ALL_CONSTRUCTS, { + LIST_VALUE: ['one', 'two'], + SAVED: 'restored', + SHOW_BLOCK: '1', + SHOW_CHECKBOX: '1', + SHOW_GRID: '1', + SHOW_INLINE: '1', + SHOW_RADIO: '1', + SHOW_ROW: '1', + }); + processor.processAllQuestions(); + + const forms = [...processor.getAllProcessedQuestions().values()]; + const root = document.createElement('div'); + forms.forEach((form) => root.append(form)); + + expect(forms.map((form) => form.id)).toEqual([ + 'PLAIN', + 'RADIO', + 'CHECKBOX', + 'COMBINED', + 'COMBINED_TEXTAREA', + 'CONFIRM', + 'EMAIL', + 'PHONE', + 'FULL_SSN', + 'SHORT_SSN', + 'ZIP', + 'STATE', + 'DATE', + 'MONTH', + 'TIME', + 'NUMBER', + 'TEXT', + 'TEXTBOX', + 'TEXTAREA', + 'HIDDEN', + 'YES_NO', + 'YES_NO_PREFER', + 'DEFAULT_SKIP', + 'NO_RESPONSE_SKIP', + 'GRID_RADIO', + 'GRID_CHECKBOX', + 'D_900000002', + 'LOOP_ITEM_1_1', + 'LOOP_ITEM_2_2', + 'END_OF_LOOP', + 'END', + ]); + expect(root.querySelectorAll('#PLAIN .displayif')).toHaveLength(2); + expect(root.querySelectorAll('#PLAIN .displayList')).toHaveLength(2); + expect(root.querySelector('#PLAIN [data-bs-toggle="popover"]')?.dataset.bsContent).toBe('Synthetic help text'); + expect(root.querySelector('#PLAIN img')?.src).toBe('https://episphere.github.io/quest/images/FemaleBaldness1.png'); + expect(root.querySelectorAll('#RADIO input[type="radio"]')).toHaveLength(2); + expect(root.querySelectorAll('#CHECKBOX input[type="checkbox"]')).toHaveLength(3); + expect(root.querySelector('#CHECKBOX')?.dataset).toMatchObject({ minCount: '1', maxCount: '2' }); + expect(root.querySelector('#CHECKBOX input[data-reset="true"]')).not.toBeNull(); + expect(root.querySelector('#COMBINED_807835037')?.getAttribute('skipto')).toBe('EMAIL'); + expect(root.querySelector('#COMBINED_TEXT')?.type).toBe('text'); + expect(root.querySelector('#COMBINED_TEXTAREA_GROUP_1')?.getAttribute('skipto')).toBe('EMAIL'); + expect(root.querySelector('#COMBINED_TEXTAREA_VALUE')?.tagName).toBe('TEXTAREA'); + expect(root.querySelector('#CONFIRM_COPY')?.getAttribute('confirm')).toBeNull(); + expect(root.querySelector('#CONFIRM_COPY')?.dataset.confirm).toBe('CONFIRM_ORIGINAL'); + expect(root.querySelector('#CONFIRM_ORIGINAL')?.dataset.confirmationFor).toBe('CONFIRM_COPY'); + + expect(root.querySelector('#EMAIL_VALUE')?.type).toBe('email'); + expect(root.querySelector('#PHONE_VALUE')?.type).toBe('tel'); + expect(root.querySelector('#FULL_SSN_VALUE')?.classList).toContain('SSN'); + expect(root.querySelector('#SHORT_SSN_VALUE')?.classList).toContain('SSNsm'); + expect(root.querySelector('#ZIP_VALUE')?.classList).toContain('zipcode'); + expect(root.querySelector('#STATE_VALUE')?.tagName).toBe('SELECT'); + expect(root.querySelector('#DATE_VALUE')?.type).toBe('date'); + expect(root.querySelector('#MONTH_VALUE')?.type).toBe('month'); + expect(root.querySelector('#TIME_VALUE')?.type).toBe('time'); + expect(root.querySelector('#NUMBER_VALUE')?.type).toBe('number'); + expect(root.querySelector('#TEXT_VALUE')?.type).toBe('text'); + expect(root.querySelector('#TEXTBOX_VALUE')?.type).toBe('text'); + expect(root.querySelector('#TEXTAREA_VALUE')?.tagName).toBe('TEXTAREA'); + expect(root.querySelector('#HIDDEN_VALUE')?.dataset.hidden).toBe('true'); + expect(root.querySelectorAll('#YES_NO input[type="radio"]')).toHaveLength(2); + expect(root.querySelectorAll('#YES_NO_PREFER input[type="radio"]')).toHaveLength(3); + expect(root.querySelector('#DEFAULT_SKIP input[type="hidden"]')?.getAttribute('skipto')).toBe('GRID_RADIO'); + expect(root.querySelector('#NO_RESPONSE_SKIP input.noresponse')?.getAttribute('skipto')).toBe('GRID_RADIO'); + expect(root.querySelectorAll('#GRID_RADIO input[type="radio"]')).toHaveLength(4); + expect(root.querySelectorAll('#GRID_CHECKBOX input[type="checkbox"]')).toHaveLength(2); + expect(root.querySelectorAll('form.question[id^="LOOP_ITEM_"]')).toHaveLength(2); + expect(moduleParams.errorLogger).not.toHaveBeenCalled(); + }); + + it('caches processed questions and reports invalid indexes and IDs through the host logger', async () => { + const { processor, moduleParams } = await createProcessor(` + {"name":"CACHE"} + [Q1] First. + [Q2] Second. + [END,end] Done. + `); + + const first = processor.processQuestion(0); + expect(processor.processQuestion(0)).toBe(first); + expect(processor.processQuestion(-1)).toBeNull(); + expect(processor.findQuestion('MISSING')).toEqual({ question: null, index: -1 }); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('question not found')); + }); +}); + +describe('QuestionProcessor navigation and processing lifecycle', () => { + const NAVIGATION_MARKDOWN = ` + {"name":"NAVIGATION"} + [Q10] Prefix neighbor. + [Q1] First. + [Q2] Second. + [END,end] Done. + `; + + it('prefers exact IDs and transfers the active question during explicit forward and back navigation', async () => { + const { processor, moduleParams } = await createProcessor( + NAVIGATION_MARKDOWN, + {}, + { renderFullQuestionList: false }, + ); + + const initial = processor.loadInitialQuestionOnStartup('Q1'); + expect(initial.id).toBe('Q1'); + expect(initial.classList).toContain('active'); + expect(processor.findQuestion('Q1').index).toBe(1); + + const second = processor.loadNextQuestion('Q2'); + expect(second.id).toBe('Q2'); + expect(initial.classList).not.toContain('active'); + expect(second.classList).toContain('active'); + + const previous = processor.loadPreviousQuestion('Q1'); + expect(previous).toBe(initial); + expect(second.classList).not.toContain('active'); + expect(initial.classList).toContain('active'); + expect(moduleParams.errorLogger).not.toHaveBeenCalled(); + }); + + it('advances sequentially and returns null without moving past either navigation boundary', async () => { + const { processor, moduleParams } = await createProcessor(NAVIGATION_MARKDOWN); + + expect(processor.getNextSequentialQuestionID()).toBe('Q1'); + expect(processor.currentQuestionIndex).toBe(1); + + processor.setCurrentQuestionIndex('update', processor.questions.length - 1); + expect(processor.getNextSequentialQuestionID()).toBeNull(); + expect(processor.currentQuestionIndex).toBe(processor.questions.length - 1); + + processor.setCurrentQuestionIndex('update', 0); + expect(processor.loadPreviousQuestion('Q1')).toBeNull(); + + processor.setCurrentQuestionIndex('update', -1); + expect(processor.getCurrentQuestion()).toBeNull(); + expect(moduleParams.errorLogger).toHaveBeenCalledTimes(3); + }); + + it('reports empty and missing startup targets without activating a question', async () => { + const empty = await createProcessor('{"name":"EMPTY"}'); + expect(empty.processor.loadInitialQuestionOnStartup('Q1')).toBeNull(); + expect(empty.moduleParams.errorLogger).toHaveBeenCalledWith( + expect.stringContaining('no questions found'), + [], + ); + + const missing = await createProcessor(NAVIGATION_MARKDOWN); + expect(missing.processor.loadInitialQuestionOnStartup('MISSING')).toBeNull(); + expect(missing.moduleParams.errorLogger).toHaveBeenCalledWith( + expect.stringContaining('question not found'), + 'MISSING', + ); + }); + + it('logs invalid active-class and forward-navigation boundaries without unloading the active form', async () => { + const { processor, moduleParams } = await createProcessor(NAVIGATION_MARKDOWN); + const active = processor.loadInitialQuestionOnStartup('Q1'); + + expect(processor.manageActiveQuestionClass(null, active)).toBeNull(); + expect(active.classList).toContain('active'); + + processor.currentQuestionIndex = processor.questions.length; + expect(processor.loadNextQuestion('END')).toBeNull(); + expect(processor.currentQuestionIndex).toBe(processor.questions.length); + expect(moduleParams.errorLogger).toHaveBeenCalledTimes(2); + }); + + it('processes partial batches once, clamps ranges, and makes completion idempotent', async () => { + const { processor } = await createProcessor(NAVIGATION_MARKDOWN); + const processQuestion = vi.spyOn(processor, 'processQuestion'); + + processor.processAllQuestions(-10, 2); + expect([...processor.getAllProcessedQuestions().keys()]).toEqual([0, 1]); + expect(processor.isProcessingComplete).toBe(false); + + processQuestion.mockClear(); + processor.processAllQuestions(0, 3); + expect(processQuestion).toHaveBeenCalledTimes(1); + expect(processQuestion).toHaveBeenCalledWith(2); + + processor.processAllQuestions(0, 100); + expect(processor.getAllProcessedQuestions()).toHaveLength(4); + expect(processor.isProcessingComplete).toBe(true); + + processQuestion.mockClear(); + processor.processAllQuestions(); + expect(processQuestion).not.toHaveBeenCalled(); + }); +}); + +describe('QuestionProcessor loop runtime', () => { + const LOOP_MARKDOWN = ` + {"name":"LOOP_RUNTIME"} + [COUNT?] Count |__|__|id=D_100 min=0 max=2| + + [ITEM?,displayif=greaterThanOrEqual(D_100,#loop)] Item {##}. + |__|id=ITEM_VALUE| + + [AFTER] After the loop. + [END,end] Done. + `; + + it('continues to the next authored iteration, then exits when the response boundary changes', async () => { + const { processor, moduleParams } = await createProcessor(LOOP_MARKDOWN, { D_100: '2' }); + const firstLoopIndex = processor.questions.findIndex(({ questionIDExactSearch }) => questionIDExactSearch === 'ITEM_1_1'); + processor.processQuestion(firstLoopIndex); + processor.setCurrentQuestionIndex('update', firstLoopIndex); + + expect(processor.getLoopData()).toMatchObject({ + locationIndex: firstLoopIndex, + loopMaxQuestionID: 'D_100', + loopMaxResponse: 2, + loopFirstQuestionID: 'ITEM', + }); + expect(processor.findQuestion('_CONTINUE1_1_1')).toMatchObject({ + question: expect.objectContaining({ id: 'ITEM_2_2' }), + }); + + processor.checkLoopMaxData(); + processor.checkLoopMaxData('UNRELATED', '1'); + processor.checkLoopMaxData('D_100', 'not-a-number'); + expect(processor.getLoopData().loopMaxResponse).toBe(2); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('invalid response')); + + processor.checkLoopMaxData('D_100', '1'); + const afterLoop = processor.findQuestion('_CONTINUE1_1_1'); + expect(afterLoop.question.id).toBe('AFTER'); + expect(afterLoop.index).toBe(processor.questions.findIndex(({ questionIDExactSearch }) => questionIDExactSearch === 'AFTER')); + + processor.checkLoopMaxData('D_100', '0'); + expect(processor.findQuestion('_CONTINUE1_1_1').question.id).toBe('AFTER'); + }); + + it('reconstructs loop data when resuming after the first iteration', async () => { + const { processor } = await createProcessor(LOOP_MARKDOWN, { D_100: '2' }); + const secondLoopIndex = processor.questions.findIndex(({ questionIDExactSearch }) => questionIDExactSearch === 'ITEM_2_2'); + processor.setCurrentQuestionIndex('update', secondLoopIndex); + + expect(processor.loopDataArr).toEqual([]); + expect(processor.getLoopData()).toMatchObject({ + locationIndex: secondLoopIndex - 1, + loopMaxResponse: 2, + loopFirstQuestionID: 'ITEM', + }); + }); + + it('selects the nearest preceding loop and localizes generated ordinals', async () => { + const { processor } = await createProcessor(` + {"name":"MULTIPLE_LOOPS"} + [D_101?] First count |__|__|id=D_101| + + [FIRST?,displayif=greaterThanOrEqual(D_101,#loop)] First {##}. + + [D_102?] Second count |__|__|id=D_102| + + [SECOND?,displayif=greaterThanOrEqual(D_102,#loop)] Second {##}. + + [END,end] Done. + `, { D_101: '1', D_102: '1' }, { language: 'es' }); + + processor.processAllQuestions(); + const secondLoopIndex = processor.questions.findIndex(({ questionIDExactSearch }) => questionIDExactSearch === 'SECOND_1_1'); + processor.setCurrentQuestionIndex('update', secondLoopIndex); + + expect(processor.getLoopData()).toMatchObject({ + loopMaxQuestionID: 'D_102', + loopFirstQuestionID: 'SECOND', + }); + expect(processById(processor, 'SECOND_1_1').textContent).toContain('1o'); + }); + + it('returns explicit fallbacks when no loop metadata or terminal marker exists', async () => { + const { processor, moduleParams } = await createProcessor(` + {"name":"NO_LOOP"} + [Q1] Only question. + [END,end] Done. + `); + + expect(processor.getLoopData()).toBeNull(); + expect(processor.findEndOfLoop()).toEqual({ question: null, index: -1 }); + expect(processor.findQuestion('_CONTINUE1_1_1')).toBeNull(); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('no end of loop found')); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('loop data not found')); + }); + + it('preserves authored loop metadata and English teen ordinals', async () => { + const { processor } = await createProcessor(` + {"name":"LOOP_ORDINALS"} + [D_300?] Count |__|__|id=D_300| + + [ITEM?|firstquestion=#loop|,displayif=greaterThanOrEqual(D_300,#loop)] Item {##}. + + [END,end] Done. + `, { D_300: '13' }); + + expect(processById(processor, 'ITEM_11_11').textContent).toContain('11th'); + expect(processById(processor, 'ITEM_12_12').textContent).toContain('12th'); + expect(processById(processor, 'ITEM_13_13').textContent).toContain('13th'); + expect(processById(processor, 'ITEM_1_1')).toMatchObject({ + id: 'ITEM_1_1', + }); + expect(processById(processor, 'ITEM_1_1').getAttribute('firstquestion')).toBe('1'); + expect(processById(processor, 'ITEM_1_1').getAttribute('loopmax')).toBe('D_300'); + }); +}); + +describe('QuestionProcessor grid and related-form lookup', () => { + const LOOKUP_MARKDOWN = ` + {"name":"LOOKUPS"} + [D_200] Existing dependency. + [COMPOUND?] Compound |__|id=COMPOUND_VALUE| + [CONDITIONAL?] Conditional |__|id=CONDITIONAL_VALUE displayif=doesNotExist("D_200")| + [HIDDEN] Hidden |hidden|id=HIDDEN_VALUE| + |grid?|id="GRID_LOOKUP"|Frequency|[ROW_A] Alpha;|(1: Never)(2: Often)| + [END,end] Done. + `; + + it('resolves grid response values and reports unknown grid controls', async () => { + const { processor, moduleParams } = await createProcessor(LOOKUP_MARKDOWN); + + expect(processor.findGridRadioCheckboxEle('ROW_A_0')).toBe('1'); + expect(processor.findGridRadioCheckboxEle('ROW_A_1')).toBe('2'); + processor.findQuestion('GRID_LOOKUP').question.querySelector('#ROW_A_0').value = ''; + expect(processor.findGridRadioCheckboxEle('ROW_A_0')).toBeNull(); + expect(processor.findGridRadioCheckboxEle('MISSING_GRID_CONTROL')).toBeNull(); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('MISSING_GRID_CONTROL')); + }); + + it('finds owning forms while excluding same-ID, hidden, conditional, and missing controls', async () => { + const withDependency = await createProcessor(LOOKUP_MARKDOWN, { D_200: 'present' }); + expect(withDependency.processor.findRelatedFormID('COMPOUND_VALUE')).toBe('COMPOUND'); + expect(withDependency.processor.findRelatedFormID('COMPOUND')).toBe(''); + expect(withDependency.processor.findRelatedFormID('HIDDEN_VALUE')).toBe(''); + expect(withDependency.processor.findRelatedFormID('CONDITIONAL_VALUE')).toBe('CONDITIONAL'); + expect(withDependency.processor.findRelatedFormID('MISSING_CONTROL')).toBe(''); + expect(withDependency.moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('MISSING_CONTROL')); + + const withoutDependency = await createProcessor(LOOKUP_MARKDOWN); + expect(withoutDependency.processor.findRelatedFormID('CONDITIONAL_VALUE')).toBe(''); + }); +}); + +describe('QuestionProcessor parser boundaries', () => { + it('adds a localized placeholder to an otherwise empty host-provided async question', async () => { + const { processor } = await createProcessor(` + {"name":"ASYNC_PLACEHOLDER"} + [ASYNC?] + [END,end] Done. + `, {}, { + asyncQuestionsMap: { + '[ASYNC?]': { func: 'loadSyntheticQuestion', args: [] }, + }, + }); + + expect(processById(processor, 'ASYNC').textContent).toContain('Loading...'); + }); + + it('generates stable default IDs and renders terminal button variants', async () => { + const { processor } = await createProcessor(` + {"name":"PARSER_BOUNDARIES"} + [EMAIL?] Email |@| + [PHONE?] Phone |tel| + [DATE?] Date |date| + [MONTH?] Month |month| + [TIME?] Time |time| + [STOP?,end=noback] Stop here |__|| + [END,end] Done. + `); + + expect(processById(processor, 'EMAIL').querySelector('#EMAIL_email')).not.toBeNull(); + expect(processById(processor, 'PHONE').querySelector('#PHONE_tel')).not.toBeNull(); + expect(processById(processor, 'DATE').querySelector('#DATE_date')).not.toBeNull(); + expect(processById(processor, 'MONTH').querySelector('#MONTH_month')).not.toBeNull(); + expect(processById(processor, 'TIME').querySelector('#TIME_time')).not.toBeNull(); + + const stop = processById(processor, 'STOP'); + expect(stop.querySelector('.next')).toBeNull(); + expect(stop.querySelector('.previous')).toBeNull(); + expect(stop.querySelector('[data-click-type="reset"]')).not.toBeNull(); + + const end = processById(processor, 'END'); + expect(end.querySelector('[data-click-type="submitSurvey"]')).not.toBeNull(); + expect(end.querySelector('.previous')).not.toBeNull(); + expect(end.querySelector('.next')).toBeNull(); + }); + + it('preserves legacy alphanumeric choice, nested-text, naming, and skip metadata', async () => { + const { processor } = await createProcessor(` + {"name":"LEGACY_COMBINED_CONTROLS"} + [DEFAULT_GROUP?] Other response. + [other] Explain -> END + [NAMED_GROUP?] Named response. + (other:CUSTOM_GROUP) Explain -> END + [EXPLICIT_ID_GROUP?] Explicit ID response. + [other|id=EXPLICIT_CHOICE] Explain -> END + [END,end] Done. + `); + + const defaultChoice = processById(processor, 'DEFAULT_GROUP').querySelector('#DEFAULT_GROUP_other'); + expect(defaultChoice).toMatchObject({ + type: 'checkbox', + name: 'DEFAULT_GROUP', + value: 'other', + }); + expect(defaultChoice.getAttribute('skipto')).toBe('END'); + expect(defaultChoice.labels[0].querySelector('#DEFAULT_TEXT')).not.toBeNull(); + + const namedChoice = processById(processor, 'NAMED_GROUP').querySelector('#CUSTOM_GROUP'); + expect(namedChoice).toMatchObject({ + type: 'radio', + name: 'CUSTOM_GROUP', + value: 'other', + }); + expect(namedChoice.getAttribute('skipto')).toBe('END'); + expect(namedChoice.labels[0].querySelector('#NAMED_TEXT')).not.toBeNull(); + + const explicitChoice = processById(processor, 'EXPLICIT_ID_GROUP').querySelector('#EXPLICIT_CHOICE'); + expect(explicitChoice).toMatchObject({ + type: 'checkbox', + name: 'EXPLICIT_ID_GROUP', + value: 'other', + }); + expect(explicitChoice.getAttribute('skipto')).toBe('END'); + expect(explicitChoice.labels[0].querySelector('#EXPLICIT_TEXT')).not.toBeNull(); + }); + + it('handles optionless text controls, restored dates, wide ranges, and titleless popovers', async () => { + const { processor } = await createProcessor(` + {"name":"SCALAR_PARTITIONS"} + [PROFILE] Missing profile {$u:notProvided}; direct value {$DIRECT_VALUE}. + |popup|More|Titleless help text| + [DATE_VALUE?] Date |date|value=2026-03-15| + [MONTH_VALUE?] Month |month|value=2026-03| + [WIDE_NUMBER?] Number |__|__|min=1 max=100| + [DEFAULT_TEXTBOX?] Text [text box] + [DEFAULT_TEXTAREA?] Notes |___| + [END,end] Done. + `); + + const profile = processById(processor, 'PROFILE'); + expect(profile.querySelector('[name="notProvided"]').textContent).toBe(''); + expect(profile.querySelector('[forid="DIRECT_VALUE"]').getAttribute('optional')).toBeNull(); + expect(profile.querySelector('[data-bs-toggle="popover"]')).toMatchObject({ + title: '', + }); + expect(profile.querySelector('[data-bs-toggle="popover"]').dataset.bsContent).toBe('Titleless help text'); + expect(processById(processor, 'DATE_VALUE').querySelector('input').value).toBe('2026-03-15'); + expect(processById(processor, 'MONTH_VALUE').querySelector('input').value).toBe('2026-03'); + expect(processById(processor, 'WIDE_NUMBER').querySelector('input')).toMatchObject({ + id: 'WIDE_NUMBER_num', + placeholder: 'Enter a value', + }); + expect(processById(processor, 'DEFAULT_TEXTBOX').querySelector('#DEFAULT_TEXTBOX_text')).not.toBeNull(); + expect(processById(processor, 'DEFAULT_TEXTAREA').querySelector('#DEFAULT_TEXTAREA_ta')).not.toBeNull(); + }); +}); diff --git a/tests/integration/questionnaireHelpers.spec.js b/tests/integration/questionnaireHelpers.spec.js new file mode 100644 index 0000000..9a58483 --- /dev/null +++ b/tests/integration/questionnaireHelpers.spec.js @@ -0,0 +1,202 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +async function loadRuntime() { + const quest = await renderFreshQuest(); + const questionnaire = await import('../../questionnaire.js'); + return { quest, ...questionnaire }; +} + +describe('questionnaire runtime helpers', () => { + it('formats SSN and telephone values only for non-Backspace keyup events', async () => { + const { parseSSN, parsePhoneNumber } = await loadRuntime(); + const ssn = document.createElement('input'); + const phone = document.createElement('input'); + ssn.value = '123456789'; + phone.value = '5555551212'; + + parseSSN({ type: 'keyup', target: ssn, code: 'Digit9' }); + parsePhoneNumber({ type: 'keyup', target: phone, code: 'Digit2' }); + expect(ssn.value).toBe('123-45-6789'); + expect(phone.value).toBe('555-555-1212'); + + ssn.value = '12345'; + phone.value = '555555'; + parseSSN({ type: 'keyup', target: ssn, code: 'Backspace' }); + parsePhoneNumber({ type: 'keyup', target: phone, code: 'Backspace' }); + expect(ssn.value).toBe('12345'); + expect(phone.value).toBe('555555'); + }); + + it('exchanges literal, numeric, and state-backed validation attributes without evaluating dates as arithmetic', async () => { + const { quest, callExchangeValues } = await loadRuntime(); + quest.state.loadInitialSurveyState({ AGE: '7' }); + const form = document.createElement('form'); + form.innerHTML = ` + + + + `; + document.body.appendChild(form); + const number = form.querySelector('#NUMBER'); + const month = form.querySelector('#MONTH'); + const date = form.querySelector('#DATE'); + + callExchangeValues(number); + callExchangeValues(month); + callExchangeValues(date); + + expect(number.dataset.min).toBe('7'); + expect(number.dataset.max).toBe('10'); + expect(month.dataset.min).toBe('2026-02'); + expect(month.dataset.max).toBe('2026-12'); + expect(date.dataset.min).toBe('2026-02-03'); + expect(date.dataset.max).toBe('2026-12-31'); + }); + + it('resolves one and many forid values, optional fallbacks, and display containers from state', async () => { + const { quest, handleForIDAttributes } = await loadRuntime(); + quest.state.loadInitialSurveyState({ SIMPLE: 'saved', SHOW: '1', CONCEPT: '123456789' }); + + const one = document.createElement('span'); + one.setAttribute('forid', 'SIMPLE'); + one.setAttribute('optional', 'fallback'); + document.body.appendChild(one); + handleForIDAttributes([one]); + expect(one.textContent).toBe('saved'); + expect(one.getAttribute('original-forid')).toBe('SIMPLE'); + + const fallback = document.createElement('span'); + fallback.setAttribute('forid', 'MISSING'); + fallback.setAttribute('optional', 'fallback'); + document.body.appendChild(fallback); + handleForIDAttributes([fallback]); + expect(fallback.textContent).toBe('fallback'); + + const container = document.createElement('div'); + container.innerHTML = ` + + + `; + document.body.appendChild(container); + const many = [...container.querySelectorAll('[forid]')]; + handleForIDAttributes(many); + expect(many[0].textContent).toBe('saved'); + expect(many[0].parentElement.style.display).toBe(''); + expect(many[1].style.display).toBe('none'); + expect(many[1].parentElement.style.display).toBe('none'); + }); + + it('renders runtime condition text and hides concept IDs from displayif output', async () => { + const { quest, manageDisplayIfSpansAndDivs } = await loadRuntime(); + quest.state.loadInitialSurveyState({ TEXT: 'resolved response', CONCEPT: '>123456789<' }); + const value = document.createElement('span'); + value.setAttribute('displayif', 'exists("TEXT")'); + value.innerHTML = 'exists("TEXT")'; + const concept = document.createElement('span'); + concept.setAttribute('displayif', 'exists("CONCEPT")'); + concept.innerHTML = '>123456789<'; + document.body.append(value, concept); + + manageDisplayIfSpansAndDivs(value); + manageDisplayIfSpansAndDivs(concept); + expect(value.innerHTML).toBe('resolved response'); + expect(concept.style.display).toBe('none'); + }); + + it('handles modal checks, radio-with-text selection, and active state from textbox input', async () => { + const { quest, textboxinput } = await loadRuntime(); + const form = quest.root.querySelector('#Q1'); + form.querySelector('fieldset').innerHTML = ` +
+ + +
+ `; + quest.state.setNumResponseInputs('Q1', 2); + const radio = form.querySelector('#OTHER'); + const text = form.querySelector('#OTHER_TEXT'); + text.value = '6'; + + textboxinput(text); + + expect(radio.checked).toBe(true); + expect(quest.root.querySelector('#softModalResponse').classList).toContain('show'); + expect(quest.root.querySelector('#modalResponseBody').innerText).toBe('Confirm this value'); + expect(quest.state.getActiveQuestionState().Q1).toEqual({ Q1: '99', OTHER_TEXT: '6' }); + }); + + it('clears mutually exclusive checkbox and text siblings, including stale validation UI', async () => { + const { quest, handleXOR } = await loadRuntime(); + const form = quest.root.querySelector('#Q1'); + form.querySelector('fieldset').innerHTML = ` +
+ + +
Old error
+
+ `; + quest.state.setNumResponseInputs('Q1', 2); + quest.state.setResponse('Q1', 'CHECK', 2, ['1']); + quest.state.setResponse('Q1', 'TEXT', 2, 'old'); + const check = form.querySelector('#CHECK'); + const text = form.querySelector('#TEXT'); + form.querySelector('.validation-container span').innerText = 'Old error'; + + expect(handleXOR(check)).toBe('1'); + expect(text.value).toBe(''); + expect(text.classList).not.toContain('invalid'); + expect(form.querySelector('.validation-container')).toBeNull(); + expect(quest.state.getActiveQuestionState().Q1.TEXT).toBeUndefined(); + + text.value = ''; + expect(handleXOR(text)).toBeNull(); + }); + + it('evaluates grid completeness, linked input completeness, and selected response families', async () => { + const { + gridHasAllAnswers, + numUnansweredGridQuestions, + radioCbHasAllAnswers, + getSelectedResponses, + } = await loadRuntime(); + const form = document.createElement('form'); + form.innerHTML = ` +
+ + + + +
+ + +
+ `; + const fieldset = form.querySelector('fieldset'); + document.body.appendChild(form); + + expect(gridHasAllAnswers(fieldset)).toBe(false); + expect(numUnansweredGridQuestions(fieldset)).toBe(1); + form.querySelector('[name="ROW2"]').checked = true; + expect(gridHasAllAnswers(fieldset)).toBe(true); + expect(numUnansweredGridQuestions(fieldset)).toBe(0); + expect(getSelectedResponses(fieldset).map(({ id }) => id)).toEqual(expect.arrayContaining(['TEXT', 'SKIP'])); + + const linked = document.createElement('form'); + linked.innerHTML = ` + + `; + expect(radioCbHasAllAnswers(linked)).toBe(false); + linked.querySelector('input[type="text"]').value = 'complete'; + expect(radioCbHasAllAnswers(linked)).toBe(true); + }); + + it('uses the media query boundary for mobile detection', async () => { + const { isMobileDevice } = await loadRuntime(); + window.matchMedia.mockReturnValueOnce({ matches: true }); + expect(isMobileDevice()).toBe(true); + window.matchMedia.mockReturnValueOnce({ matches: false }); + expect(isMobileDevice()).toBe(false); + expect(window.matchMedia).toHaveBeenCalledWith('(max-width: 576px)'); + }); +}); diff --git a/tests/integration/responsePiping.spec.js b/tests/integration/responsePiping.spec.js new file mode 100644 index 0000000..11650e1 --- /dev/null +++ b/tests/integration/responsePiping.spec.js @@ -0,0 +1,163 @@ +import { describe, expect, it, vi } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +const SCALAR_PIPE_SURVEY = ` +{"name":"PIPE_SCALAR"} + +[SOURCE?] Enter the name we should use. +|__|id=SOURCE_TEXT| + +[PROMPT] Hello {$SOURCE_TEXT:participant}. Please continue. + +[SUMMARY] Summary: {$SOURCE_TEXT}. + +[END,end] Done. +`; + +const SUMMARY_PIPE_SURVEY = ` +{"name":"PIPE_SUMMARY"} + +[ENTRY?] Optional entry. +|__|id=MISSING| + +[SUMMARY] Values: {$FIRST} / {$MISSING} / {$WHITESPACE}. +[FALLBACK] Hello {$MISSING:participant}. +[CONCEPT] Sensitive {$CONCEPT:masked}. +[END,end] Done. +`; + +const DISPLAY_LIST_PIPE_SURVEY = ` +{"name":"PIPE_LIST"} + +[SELECT?] Select all that apply. +[1:CHOICES] Alpha +[2:CHOICES] Beta +[99:CHOICES] Other: |__|id=OTHER_TEXT| + +[SUMMARY] Selected: |displayList(valueIsOneOf("CHOICES",1),"Alpha",valueIsOneOf("CHOICES",2),"Beta",exists("OTHER_TEXT"),"Other",exists("OTHER_TEXT"),"OTHER_TEXT",sep="; ")| +[END,end] Done. +`; + +function treeAt(questionID) { + return JSON.stringify({ + rootNode: { value: null, children: [{ value: questionID, children: [] }] }, + currentNode: questionID, + }); +} + +async function activeQuestion(quest, questionID) { + if (questionID) { + await vi.waitFor(() => expect(quest.root.querySelector('form.question.active')?.id).toBe(questionID)); + } + return quest.root.querySelector('form.question.active'); +} + +async function next(quest) { + (await activeQuestion(quest)).querySelector('.next').click(); +} + +async function back(quest) { + (await activeQuestion(quest)).querySelector('.previous').click(); +} + +function focusout(input) { + input.dispatchEvent(new FocusEvent('focusout', { bubbles: true })); +} + +describe('response piping through participant runtime state', () => { + it('pipes a delegated text response into a following question and summary, stores it, and refreshes it after Back/edit', async () => { + const quest = await renderFreshQuest({ markdown: SCALAR_PIPE_SURVEY }); + const source = quest.root.querySelector('#SOURCE_TEXT'); + + source.value = 'Original name'; + focusout(source); + expect(quest.state.getActiveQuestionState()).toEqual({ SOURCE: 'Original name' }); + + await next(quest); + expect((await activeQuestion(quest, 'PROMPT')).textContent).toContain('Hello Original name'); + await vi.waitFor(() => expect(quest.calls.store).toHaveLength(1)); + expect(quest.calls.store[0]['PIPE_SCALAR.SOURCE']).toBe('Original name'); + + await back(quest); + await activeQuestion(quest, 'SOURCE'); + expect(quest.root.querySelector('#SOURCE_TEXT').value).toBe('Original name'); + + source.value = 'Updated name'; + focusout(source); + await next(quest); + expect((await activeQuestion(quest, 'PROMPT')).textContent).toContain('Hello Updated name'); + await next(quest); + expect((await activeQuestion(quest, 'SUMMARY')).textContent).toContain('Summary: Updated name'); + expect(quest.state.getSurveyState().SOURCE).toBe('Updated name'); + expect(quest.errors).toEqual([]); + }); + + it('pipes persisted state when resuming directly at a summary', async () => { + const quest = await renderFreshQuest({ + markdown: SCALAR_PIPE_SURVEY, + persistedData: { + SOURCE: 'Resumed name', + treeJSON: treeAt('SUMMARY'), + }, + }); + + expect((await activeQuestion(quest, 'SUMMARY')).textContent).toContain('Summary: Resumed name'); + expect(quest.state.getCache().SOURCE).toBe('Resumed name'); + expect(quest.errors).toEqual([]); + }); + + it('keeps populated multi-value summary spans, hides missing ones, retains whitespace, and handles fallback and concept suppression', async () => { + const quest = await renderFreshQuest({ + markdown: SUMMARY_PIPE_SURVEY, + persistedData: { + FIRST: 'First value', + WHITESPACE: ' ', + CONCEPT: '123456789', + treeJSON: treeAt('SUMMARY'), + }, + }); + + const summary = await activeQuestion(quest, 'SUMMARY'); + const summaryValues = [...summary.querySelectorAll('span[forid]')]; + expect(summaryValues.map(({ textContent, style }) => ({ textContent, display: style.display }))).toEqual([ + { textContent: 'First value', display: '' }, + { textContent: 'MISSING', display: 'none' }, + { textContent: ' ', display: '' }, + ]); + + await next(quest); + expect((await activeQuestion(quest, 'FALLBACK')).textContent).toContain('Hello participant'); + await next(quest); + const concept = await activeQuestion(quest, 'CONCEPT'); + expect(concept.querySelector('[forid="CONCEPT"]').textContent).toBe(''); + expect(concept.textContent).not.toContain('123456789'); + expect(quest.errors).toEqual([]); + }); + + it('uses checkbox selections and nested Other text in a displayList summary', async () => { + const quest = await renderFreshQuest({ markdown: DISPLAY_LIST_PIPE_SURVEY }); + const select = await activeQuestion(quest, 'SELECT'); + const alpha = select.querySelector('#CHOICES_1'); + const other = select.querySelector('#CHOICES_99'); + const detail = select.querySelector('#OTHER_TEXT'); + + alpha.click(); + other.click(); + detail.value = 'Participant detail'; + detail.dispatchEvent(new InputEvent('input', { bubbles: true, data: 'l', inputType: 'insertText' })); + await vi.waitFor(() => expect(quest.state.getActiveQuestionState().SELECT).toEqual({ + CHOICES: ['1', '99'], + OTHER_TEXT: 'Participant detail', + })); + + await next(quest); + expect((await activeQuestion(quest, 'SUMMARY')).textContent).toContain('Alpha; Other; Participant detail'); + await vi.waitFor(() => expect(quest.calls.store).toHaveLength(1)); + expect(quest.calls.store[0]['PIPE_LIST.SELECT']).toEqual({ + CHOICES: ['1', '99'], + OTHER_TEXT: 'Participant detail', + }); + expect(quest.errors).toEqual([]); + }); + +}); diff --git a/tests/integration/restoreResponses.spec.js b/tests/integration/restoreResponses.spec.js new file mode 100644 index 0000000..eeacfc7 --- /dev/null +++ b/tests/integration/restoreResponses.spec.js @@ -0,0 +1,125 @@ +import { describe, expect, it } from 'vitest'; +import { renderFreshQuest } from '../helpers/questRuntime.js'; + +function treeAt(questionID) { + return JSON.stringify({ + rootNode: { value: null, children: [{ value: questionID, children: [] }] }, + currentNode: questionID, + }); +} + +describe('response restoration', () => { + it('restores a simple text response into the active input', async () => { + const quest = await renderFreshQuest({ + markdown: ` + {"name":"RESTORE_TEXT"} + [TEXT?] Enter text. |__|id=TEXT_VALUE| + [END,end] Done. + `, + persistedData: { TEXT: 'saved text', treeJSON: treeAt('TEXT') }, + }); + + expect(quest.root.querySelector('#TEXT_VALUE').value).toBe('saved text'); + expect(quest.state.getActiveQuestionState().TEXT).toBe('saved text'); + }); + + it('restores every checked value in a checkbox array', async () => { + const quest = await renderFreshQuest({ + markdown: ` + {"name":"RESTORE_CHECKS"} + [CHECK?] Select all. + [1] First + [2] Second + [3] Third + [END,end] Done. + `, + persistedData: { CHECK: ['1', '3'], treeJSON: treeAt('CHECK') }, + }); + + expect(quest.root.querySelector('#CHECK_1').checked).toBe(true); + expect(quest.root.querySelector('#CHECK_2').checked).toBe(false); + expect(quest.root.querySelector('#CHECK_3').checked).toBe(true); + expect(quest.state.getActiveQuestionState().CHECK).toEqual(['1', '3']); + }); + + it('restores compound strings, radio values, and checkbox arrays by response key', async () => { + const quest = await renderFreshQuest({ + markdown: ` + {"name":"RESTORE_COMPOUND"} + [MULTI?] Supply several values. + [1:CHECK_GROUP] First + [2:CHECK_GROUP] Second + (7:RADIO_GROUP) Seven + (8:RADIO_GROUP) Eight + |__|id=DETAIL| + [END,end] Done. + `, + persistedData: { + MULTI: { + CHECK_GROUP: ['1', '2'], + RADIO_GROUP: '8', + DETAIL: 'restored detail', + }, + treeJSON: treeAt('MULTI'), + }, + }); + + expect(quest.root.querySelector('#CHECK_GROUP_1').checked).toBe(true); + expect(quest.root.querySelector('#CHECK_GROUP_2').checked).toBe(true); + expect(quest.root.querySelector('#RADIO_GROUP_8').checked).toBe(true); + expect(quest.root.querySelector('#DETAIL').value).toBe('restored detail'); + }); + + it('restores XOR object values into authored XOR controls', async () => { + const quest = await renderFreshQuest({ + markdown: ` + {"name":"RESTORE_XOR"} + [XORQ?] Enter an XOR value. |__|id=XOR_FIELD xor=XOR_GROUP| + [END,end] Done. + `, + persistedData: { + XORQ: { XOR_GROUP: { XOR_FIELD: 'exclusive value' } }, + treeJSON: treeAt('XORQ'), + }, + }); + + expect(quest.root.querySelector('#XOR_FIELD').value).toBe('exclusive value'); + }); + + it('ignores dynamically absent controls while retaining persisted state', async () => { + const quest = await renderFreshQuest({ + markdown: ` + {"name":"RESTORE_DYNAMIC"} + [DYNAMIC?] The host may add this control later. + [END,end] Done. + `, + persistedData: { DYNAMIC: 'host-owned value', treeJSON: treeAt('DYNAMIC') }, + }); + + expect(quest.rendered).toBe(true); + expect(quest.state.getSurveyState().DYNAMIC).toBe('host-owned value'); + expect(quest.errors).toEqual([]); + }); + + it('logs malformed object keys, unsupported response types, and unmatched radio values', async () => { + const quest = await renderFreshQuest(); + const { restoreResponses } = await import('../../restoreResponses.js'); + + restoreResponses({ Q1: { '': 'bad' } }, 'Q1'); + restoreResponses({ Q1: 42 }, 'Q1'); + restoreResponses({ Q1: 'missing-radio-value' }, 'Q1'); + + expect(quest.errors.flat().join(' ')).toContain('skipping'); + expect(quest.errors.flat().join(' ')).toContain('unhandled response type'); + expect(quest.errors.flat().join(' ')).toContain('Problem with radio'); + }); + + it('does nothing when the question or persisted response is absent', async () => { + const quest = await renderFreshQuest(); + const { restoreResponses } = await import('../../restoreResponses.js'); + + expect(() => restoreResponses({}, 'Q1')).not.toThrow(); + expect(() => restoreResponses({ MISSING: 'value' }, 'MISSING')).not.toThrow(); + expect(quest.errors).toEqual([]); + }); +}); diff --git a/tests/integration/validation.spec.js b/tests/integration/validation.spec.js new file mode 100644 index 0000000..2e58f48 --- /dev/null +++ b/tests/integration/validation.spec.js @@ -0,0 +1,205 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { loadFreshModuleGraph } from '../helpers/questRuntime.js'; + +function appendInput({ type = 'text', value = '', attributes = {}, className = '' } = {}) { + const form = document.createElement('form'); + const input = document.createElement('input'); + input.type = type; + input.value = value; + input.className = className; + Object.entries(attributes).forEach(([key, attributeValue]) => { + input.setAttribute(key, attributeValue === true ? '' : String(attributeValue)); + }); + form.appendChild(input); + document.body.appendChild(form); + return { form, input }; +} + +describe('validation through exported behavior', () => { + let validateInput; + let moduleParams; + + beforeEach(async () => { + ({ questionnaire: { moduleParams } } = await loadFreshModuleGraph()); + ({ validateInput } = await import('../../validate.js')); + }); + + it('marks required empty values invalid and clears the message after correction', () => { + const { form, input } = appendInput({ type: 'text', attributes: { 'data-required': true } }); + + validateInput(input); + expect(input.classList).toContain('invalid'); + expect(form.classList).toContain('invalid'); + expect(input.nextElementSibling.firstElementChild.innerText).toContain('Please fill out this field'); + + input.value = 'valid'; + validateInput(input); + expect(input.classList).not.toContain('invalid'); + expect(form.classList).not.toContain('invalid'); + expect(input.nextElementSibling).toBeNull(); + }); + + it.each([ + ['1', { 'data-min': '2', 'data-max': '8' }, 'greater than or equal to 2'], + ['9', { 'data-min': '2', 'data-max': '8' }, 'less than or equal to 8'], + ])('validates numeric boundaries for %s', (value, attributes, expected) => { + const { input } = appendInput({ type: 'number', value, attributes }); + validateInput(input); + expect(input.nextElementSibling.firstElementChild.innerText).toContain(expected); + }); + + it('accepts an in-range number', () => { + const { input } = appendInput({ type: 'number', value: '5', attributes: { 'data-min': '2', 'data-max': '8' } }); + validateInput(input); + expect(input.classList).not.toContain('invalid'); + }); + + it.each([ + ['email', 'invalid', 'email address'], + ['tel', '555-123', 'phone number'], + ['text', '000-00-0000', 'valid Social Security Number', 'SSN'], + ['text', '0000', 'last four digits', 'SSNsm'], + ])('rejects invalid %s input', (type, value, message, className = '') => { + const { input } = appendInput({ type, value, className }); + validateInput(input); + expect(input.nextElementSibling.firstElementChild.innerText).toContain(message); + }); + + it.each([ + ['email', 'person@example.org'], + ['tel', '555-555-1212'], + ['text', '123-45-6789', 'SSN'], + ['text', '1234', 'SSNsm'], + ])('accepts a valid %s input', (type, value, className = '') => { + const { input } = appendInput({ type, value, className }); + validateInput(input); + expect(input.classList).not.toContain('invalid'); + }); + + it('validates minimum, maximum, and exact text length', () => { + const short = appendInput({ value: 'a', attributes: { 'data-minlen': 2 } }).input; + validateInput(short); + expect(short.nextElementSibling.firstElementChild.innerText).toContain('at least 2'); + + const long = appendInput({ value: 'abcd', attributes: { 'data-maxlen': 3 } }).input; + validateInput(long); + expect(long.nextElementSibling.firstElementChild.innerText).toContain('at most 3'); + + const exact = appendInput({ value: 'ab', attributes: { 'data-minlen': 3, 'data-maxlen': 3 } }).input; + validateInput(exact); + expect(exact.nextElementSibling.firstElementChild.innerText).toContain('should have 3'); + }); + + it('normalizes MM-YYYY month input and enforces month boundaries', () => { + const input = document.createElement('input'); + const form = document.createElement('form'); + input.setAttribute('type', 'month'); + Object.defineProperty(input, 'value', { value: '02-2026', writable: true }); + input.dataset.minDate = encodeURIComponent('2026-01'); + input.dataset.maxDate = encodeURIComponent('2026-12'); + form.appendChild(input); + document.body.appendChild(form); + + validateInput(input); + expect(input.value).toBe('2026-02'); + expect(input.classList).not.toContain('invalid'); + }); + + it.each([ + ['2025-12-31', { 'data-min-date': '2026-01-01' }, 'after 1/1/2026'], + ['2027-01-01', { 'data-max-date': '2026-12-31' }, 'before 12/31/2026'], + ])('validates date boundary %s', (value, attributes, message) => { + const { input } = appendInput({ type: 'date', value, attributes }); + validateInput(input); + expect(input.nextElementSibling.firstElementChild.innerText).toContain(message); + }); + + it('accepts a date inside its authored boundaries', () => { + const { input } = appendInput({ + type: 'date', + value: '2026-06-15', + attributes: { 'data-min-date': '2026-01-01', 'data-max-date': '2026-12-31' }, + }); + validateInput(input); + expect(input.classList).not.toContain('invalid'); + }); + + it.each([ + ['not-a-month', {}, 'YYYY-MM'], + ['2025-12', { min: '2026-01' }, 'after 2026-01'], + ['2027-01', { max: '2026-12' }, 'before 2026-12'], + ])('rejects invalid or out-of-range month value %s', (value, boundaries, message) => { + const input = document.createElement('input'); + const form = document.createElement('form'); + input.setAttribute('type', 'month'); + Object.defineProperty(input, 'value', { value, writable: true }); + if (boundaries.min) input.dataset.minDate = encodeURIComponent(boundaries.min); + if (boundaries.max) input.dataset.maxDate = encodeURIComponent(boundaries.max); + form.appendChild(input); + document.body.appendChild(form); + + validateInput(input); + expect(input.nextElementSibling.firstElementChild.innerText).toContain(message); + }); + + it('validates checkbox minimum and maximum counts at the end of a response list', () => { + const form = document.createElement('form'); + form.dataset.minCount = '2'; + form.dataset.maxCount = '2'; + form.innerHTML = ` +
+
+
+ `; + document.body.appendChild(form); + const inputs = [...form.querySelectorAll('input')]; + const lastResponse = form.lastElementChild; + + validateInput(inputs[0]); + expect(lastResponse.nextElementSibling.firstElementChild.innerText).toContain('selected 1'); + + inputs[1].checked = true; + validateInput(inputs[1]); + expect(lastResponse.classList).not.toContain('invalid'); + + inputs[2].checked = true; + validateInput(inputs[2]); + expect(lastResponse.nextElementSibling.firstElementChild.innerText).toContain('selected 3'); + }); + + it('adds mismatch errors to both confirmation fields and clears both after correction', () => { + vi.spyOn(console, 'warn').mockImplementation(() => {}); + const form = document.createElement('form'); + form.innerHTML = ` + + + `; + document.body.appendChild(form); + const original = form.querySelector('#ORIGINAL'); + const confirmation = form.querySelector('#CONFIRM'); + + validateInput(confirmation); + expect(original.classList).toContain('invalid'); + expect(confirmation.classList).toContain('invalid'); + expect(confirmation.nextElementSibling.firstElementChild.innerText).toContain('do not match'); + + confirmation.value = 'first'; + validateInput(confirmation); + expect(original.classList).not.toContain('invalid'); + expect(confirmation.classList).not.toContain('invalid'); + }); + + it('intentionally skips validation for native radio and time controls', () => { + const radio = appendInput({ type: 'radio', value: '1' }).input; + const time = appendInput({ type: 'time', value: '10:30' }).input; + validateInput(radio); + validateInput(time); + expect(moduleParams.errorLogger).not.toHaveBeenCalled(); + }); + + it('reports unsupported input types through the host logger', () => { + const { input } = appendInput({ type: 'color', value: '#ffffff' }); + validateInput(input); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('no handle for type: color'), input); + }); +}); diff --git a/tests/knownDefects/registry.js b/tests/knownDefects/registry.js new file mode 100644 index 0000000..4540168 --- /dev/null +++ b/tests/knownDefects/registry.js @@ -0,0 +1,97 @@ +const DEFAULT_OWNER = 'Quest maintainers'; +const DEFAULT_EXPIRY = '2027-08-04'; + +function defect(localDefectId, target, reason, extra = {}) { + return Object.freeze({ + localDefectId, + target, + reason, + owner: DEFAULT_OWNER, + expiry: DEFAULT_EXPIRY, + ...extra, + }); +} + +/** + * Existing Quest behavior characterized before production changes resume. + * These records are intentionally test-only. Expiry is checked in the + * non-blocking known-defect lane so accepted failures cannot become permanent. + */ +export const runtimeDefects = Object.freeze({ + treeDepthFirst: defect('QD-TREE-001', 'Tree.next depth-first traversal across root siblings', 'Traversal stops after the first root branch instead of continuing to later siblings.'), + treePrune: defect('QD-TREE-002', 'Tree.prune branch removal', 'Pruning does not return to the authored predecessor with the expected sibling structure intact.'), + treeHasNext: defect('QD-TREE-003', 'Tree.hasNext non-mutating lookahead', 'Lookahead reports false for the first root child even though a next value exists.'), + gridRowCondition: defect('QD-GRID-001', 'Radio-grid row displayif encoding', 'The row condition is encoded more than once and cannot be decoded to the authored expression.'), + gridBackFocusLifecycle: defect('QD-GRID-002', 'Grid Back focus-helper lifecycle', 'Returning to a previously answered grid restores its values but logs that the focus helper is missing instead of preserving a valid focus-management node.', { + sourcePaths: ['prod/module2.txt'], + questionId: 'D_981441822', + }), + mathDotValue: defect('QD-MATH-001', 'MathJS dot-notation value lookup', 'A valid leaf in a one-property response object is not returned.'), + mathDotExists: defect('QD-MATH-002', 'MathJS dot-notation existence lookup', 'exists() does not recognize a valid nested response leaf.'), + mathMonthRange: defect('QD-MATH-003', 'dateCompare documented month range', 'dateCompare accepts month 12 even though its contract documents zero through eleven.'), + legacyQuotedString: defect('QD-COND-001', 'Legacy condition quoted-string fallback', 'Fallback parsing drops or misinterprets quoted string literals.'), + corpusMalformedCondition: defect('QD-CORPUS-001', 'Malformed production condition fallback', 'The truncated COVID-19 grid condition falls back to a truthy function-name string, so its false outcome and hidden state are unreachable.', { + owner: 'Questionnaire maintainers', + corpusCommit: '7ae99a22af325cf0e14be047a7636462db9bfd50', + sourcePaths: ['prod/moduleCOVID19.txt', 'prod/moduleCOVID19Spanish.txt'], + questionId: 'D_114280729', + }), + storeRollback: defect('QD-STORE-001', 'Store failure state rollback', 'Navigation rolls back after non-200/rejected writes, but the pre-write response snapshot is not restored.'), + sequentialHostCallbacks: defect('QD-STATE-001', 'Sequential render host callback rebinding', 'Module-level state keeps the first render host callbacks when a second survey is rendered in the same document.'), + finalCompoundResponseRemoval: defect('QD-STATE-002', 'Final compound response removal', 'Removing the final key assigns undefined without deleting the enumerable key, leaving a stale response object in active state.'), + clearedRestoredResponseLookup: defect('QD-STATE-003', 'Cleared restored response lookup', 'Clearing a restored scalar removes its live index entries, but lookup falls back to the old value retained in survey state.'), + unsyncedArrayResponseLookup: defect('QD-STATE-004', 'Unsynced array response lookup', 'Live cache lookup excludes arrays and objects, so an unsynced checkbox-array response cannot be found until it reaches survey state.'), + backResumeResponseRestoration: defect('QD-STATE-005', 'Back-generated tree token response restoration on resume', 'Back persists the authored question token with its ? or ! marker, but startup looks up the retained response under that raw token instead of the normalized form ID, leaving the resumed answer visually unselected.'), + malformedLoopContinuation: defect('QD-QP-001', 'Malformed loop-continuation target handling', 'A malformed _CONTINUE target dereferences a failed regular-expression match instead of logging the invalid target and returning no question.'), + currentQuestionUpperBoundary: defect('QD-QP-002', 'Current-question upper-bound guard', 'An index equal to the question count passes the range guard and attempts to process an undefined question.'), + missingConfirmationTarget: defect('QD-QP-003', 'Missing confirmation target handling', 'A confirmation input that references a missing peer removes its invalid attribute but then dereferences the missing peer.'), + missingQuestionId: defect('QD-QP-004', 'Missing question-ID lookup', 'findQuestion logs a missing ID but then calls startsWith on the absent value instead of returning its documented not-found result.'), + explicitCombinedChoiceName: defect('QD-QP-005', 'Explicit name metadata on legacy combined choices', 'The combined-choice parser interpolates the full regular-expression match array, producing a duplicated comma-separated name instead of the authored name.'), + submitFocusRestore: defect('QD-A11Y-001', 'Submit-dialog Escape focus restoration', 'The dialog closes on Escape but leaves focus inactive instead of returning it to the Submit Survey trigger.'), + modalQuestionFocusRace: defect('QD-A11Y-002', 'Question-to-modal focus handoff', 'A pending delayed question-focus callback can run after a response dialog opens and move focus away from the dialog title.'), + staleSelectionAnnouncement: defect('QD-A11Y-003', 'Selection announcement after navigation', 'A delayed selection announcement can repopulate the live region after Next or Back explicitly clears it.'), + gridDeferredFocusAfterNavigation: defect('QD-A11Y-004', 'Windows grid focus-helper after navigation', 'A pending Windows grid-focus callback can move the shared helper back into an inactive grid after the participant advances.'), + authoringFallbackClear: defect('QD-AUTHOR-001', 'Authoring clear-memory operation after localforage fallback', 'The fallback storage adapter has no removeItem method, so Clear Memory throws after initialization falls back.', { + source: 'index.html authoring interface', + }), +}); + +export const axeDefects = Object.freeze({ + progressbarName: defect('QD-AXE-001', '#progressBar accessible name', 'The progressbar has no accessible name.', { ruleId: 'aria-progressbar-name', impact: 'serious', targets: ['#progressBar'] }), + progressbarValue: defect('QD-AXE-002', '#progressBar ARIA value', 'The progressbar exposes an invalid ARIA attribute value.', { ruleId: 'aria-valid-attr-value', impact: 'critical', targets: ['#progressBar'] }), + emptyGridHeader: defect('QD-AXE-003', 'Grid row-header spacer', 'The responsive grid contains an empty table header cell.', { ruleId: 'empty-table-header', impact: 'minor', targets: ['.nr.hr'] }), + validationContrast: defect('QD-AXE-004', 'Validation message contrast', 'The visible validation message does not meet the required color contrast.', { ruleId: 'color-contrast', impact: 'serious', targets: ['.validation-container > span'] }), + validationLabel: defect('QD-AXE-005', 'Bounded numeric input label', 'The input relies on a title-only label relationship.', { ruleId: 'label-title-only', impact: 'serious', targets: ['#bounded'] }), + imageAlt: defect('QD-AXE-006', 'Question image text alternative', 'QuestionProcessor emits an image without an alternative text attribute.', { ruleId: 'image-alt', impact: 'critical', targets: ['#PLAIN img'] }), +}); + +export const accessibilityDefects = Object.freeze({ + compoundQuestionContext: defect('QD-A11Y-005', 'Compound-question radio context', 'Radio choices in a multi-subgroup form are named only by their response option, not the subgroup prompt that gives the choice its meaning.', { + sourcePaths: ['prod/moduleDietScreener', 'prod/moduleDietScreenerSpanish.txt'], + questionId: 'D_916948380', + automatedContract: 'Each radio choice exposes both its subgroup prompt and its response option in its accessible name or equivalent accessible context.', + manualContract: 'Verify that VoiceOver and JAWS announce the food or sub-question prompt together with the selected frequency when moving across a compound form.', + }), + 1079: defect('CONNECT-1079', 'Quest 2 participant choice semantics', 'Choice inputs are not consistently exposed to assistive technology with their native role, accessible name, and checked state.', { + issue: 'https://github.com/episphere/connect/issues/1079', + title: 'Quest2 - JAWS and VoiceOver for Quest2', + scope: 'Quest 2 participant runtime only; Quest 1 is intentionally out of scope.', + automatedContract: 'Each choice remains discoverable by native radio role and accessible name, and exposes its checked state.', + manualContract: 'Recheck real VoiceOver/Safari and JAWS/Chrome or Edge announcement, focus, and activation after the PWA redesign.', + limitation: 'Playwright accessibility trees do not run VoiceOver or JAWS and cannot validate their command-routing modes.', + }), + 1587: defect('CONNECT-1587', 'Native participant keyboard behavior', 'Quest delegated key handling suppresses browser-native input behavior.', { + issue: 'https://github.com/episphere/connect/issues/1587', + title: 'Keyboard Navigation for Quest', + scope: 'Keyboard-only operation without requiring a screen reader.', + automatedContract: 'Focused native radios, checkboxes, and selects retain their standard Space and arrow-key behavior.', + manualContract: 'Test Tab/Shift+Tab, Enter, Space, radio arrows, checkbox Space, and native select keys separately from screen-reader commands.', + limitation: 'VoiceOver Quick Nav and the JAWS Virtual Cursor alter key routing; those are recorded in the manual matrix instead of treated as raw browser key events.', + }), +}); + +export const allKnownDefects = Object.freeze([ + ...Object.values(runtimeDefects), + ...Object.values(axeDefects), + ...Object.values(accessibilityDefects), +]); diff --git a/tests/knownDefects/runtime.spec.js b/tests/knownDefects/runtime.spec.js new file mode 100644 index 0000000..a48c6fa --- /dev/null +++ b/tests/knownDefects/runtime.spec.js @@ -0,0 +1,298 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { parseGrid } from '../../buildGrid.js'; +import { Tree } from '../../tree.js'; +import { renderFreshQuest, SIMPLE_SURVEY } from '../helpers/questRuntime.js'; +import { runtimeDefects } from './registry.js'; + +const expectedCovidGridResponseIds = [ + 'D_488415137', 'D_167695804', 'D_730334054', 'D_215996690', + 'D_462737492', 'D_469675296', 'D_962475128', 'D_989576239', + 'D_338613869', 'D_126794793', 'D_218793117', 'D_524096053', + 'D_814101706', 'D_635026188', 'D_238135048', 'D_632714520', +].flatMap((id) => [`${id}_0`, `${id}_1`]); + +// Reviewed against the locked English and Spanish COVID Markdown. Both files +// contain this identical, truncated display condition for D_114280729. +const MALFORMED_COVID_GRID_COMPLEMENT = 'someSelected("D_488415137_0","D_488415137_1","D_167695804_0","D_167695804_1","D_730334054_0","D_730334054_1","D_215996690_0","D_215996690_1","D_462737492_0","D_462737492_1","D_469675296_0","D_469675296_1","D_962475128_0","D_962475128_1","D_989576239_0","D_989576239_1","D_338613869_0","D_338613869_1","D_126794793_0","D_126794793_1","D_218793117_0","D_218793117_1","D_524096053_0","SRVCOV_COV19C1_V1R0_1,1","D_814101706_0","D_814101706_1","D_635026188_0","D_238135048_0","D_238135048_1","D_632714520_0","D_632714520_1'; + +function buildBranchedTree() { + const tree = new Tree(); + tree.add(['Q1', 'Q2', 'Q3']); + tree.next(); + tree.add('Q1A'); + tree.next(); + tree.add('Q1B'); + tree.next(); + return tree; +} + +async function loadStateManager(initialState = {}) { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = {}; + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + const appState = stateModule.getStateManager(); + appState.loadInitialSurveyState(initialState); + appState.setQuestionProcessor({ + findQuestion: () => ({ question: null }), + findGridRadioCheckboxEle: () => null, + }); + return appState; +} + +async function loadMathWithState(initialState = {}) { + const appState = await loadStateManager(initialState); + const mathModule = await import('../../customMathJSImplementation.js'); + mathModule.customMathJSFunctions.appState = appState; + return mathModule.customMathJSFunctions; +} + +async function loadEvaluator(state = {}, previousResults = {}) { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = previousResults; + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + stateModule.getStateManager().loadInitialSurveyState(state); + return (await import('../../evaluateConditions.js')).evaluateCondition; +} + +async function loadQuestionProcessor(markdown) { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + const i18n = (await import('../../i18n/en.js')).default; + questionnaire.moduleParams.i18n = i18n; + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = {}; + questionnaire.moduleParams.asyncQuestionsMap = {}; + questionnaire.moduleParams.renderFullQuestionList = true; + questionnaire.moduleParams.isRenderer = true; + + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + const appState = stateModule.getStateManager(); + appState.loadInitialSurveyState({}); + + const { initializeCustomMathJSFunctions } = await import('../../customMathJSImplementation.js'); + initializeCustomMathJSFunctions(); + const { QuestionProcessor } = await import('../../questionProcessor.js'); + const processor = new QuestionProcessor(markdown, { + current_date: new Date('2026-03-15T12:00:00Z'), + current_day: 15, + current_month: 3, + current_month_str: 2, + current_year: 2026, + quest_format_date: '2026-3-15', + }, i18n); + appState.setQuestionProcessor(processor); + + return { processor, errorLogger: questionnaire.moduleParams.errorLogger }; +} + +async function answerAndAdvance(quest) { + quest.root.querySelector('#Q1_1').click(); + quest.root.querySelector('#Q1 .next').click(); + await vi.waitFor(() => expect(quest.store).toHaveBeenCalled()); +} + +describe('characterized Quest runtime defects', () => { + beforeEach(() => vi.useRealTimers()); + + it.fails(`${runtimeDefects.treeDepthFirst.localDefectId}: walks all root branches depth-first`, () => { + const tree = buildBranchedTree(); + expect(tree.next().value.value).toBe('Q2'); + expect(tree.next().value.value).toBe('Q3'); + expect(tree.next()).toEqual({ done: true, value: undefined }); + }); + + it.fails(`${runtimeDefects.treePrune.localDefectId}: prunes the current branch`, () => { + const tree = new Tree(); + tree.add(['Q1', 'Q2']); + tree.next(); + tree.add('Q1A'); + tree.next(); + tree.prune(); + expect(tree.currentNode.value).toBe('Q1'); + expect(tree.currentNode.children).toEqual([]); + expect(tree.rootNode.children.map(({ value }) => value)).toEqual(['Q1', 'Q2']); + }); + + it.fails(`${runtimeDefects.treeHasNext.localDefectId}: reports lookahead without mutation`, () => { + const tree = new Tree(); + tree.add('Q1'); + expect(tree.hasNext()).toBe(true); + expect(tree.currentNode).toBe(tree.rootNode); + }); + + it.fails(`${runtimeDefects.gridRowCondition.localDefectId}: encodes a row condition once`, () => { + const html = parseGrid( + '|grid?|id=GRID|Shared|[ROW,displayif=equals(SHOW,1)]Conditional row;|(1:Yes)|', + '
', + ); + const template = document.createElement('template'); + template.innerHTML = html; + expect(decodeURIComponent(template.content.querySelector('[data-displayif]').dataset.displayif)).toBe('equals(SHOW,1)'); + }); + + it.fails(`${runtimeDefects.mathDotValue.localDefectId}: resolves a dot-notation leaf`, async () => { + const fn = await loadMathWithState({ OBJECT: { NESTED: 'value' } }); + expect(fn.getKeyedValue('OBJECT.NESTED')).toBe('value'); + }); + + it.fails(`${runtimeDefects.mathDotExists.localDefectId}: recognizes an existing dot-notation leaf`, async () => { + const fn = await loadMathWithState({ OBJECT: { NESTED: 'value' } }); + expect(fn.exists('OBJECT.NESTED')).toBe(true); + }); + + it.fails(`${runtimeDefects.mathMonthRange.localDefectId}: rejects month 12`, async () => { + const fn = await loadMathWithState(); + expect(() => fn.dateCompare(12, 2026, 1, 2027)).toThrow('months need to be'); + }); + + it.fails(`${runtimeDefects.legacyQuotedString.localDefectId}: preserves quoted fallback literals`, async () => { + const evaluateCondition = await loadEvaluator({}, { PRIOR: 'yes' }); + expect(evaluateCondition('equals(PRIOR,"yes")')).toBe(true); + }); + + it.fails(`${runtimeDefects.corpusMalformedCondition.localDefectId}: rejects a truncated function expression`, async () => { + const evaluateCondition = await loadEvaluator(); + expect(evaluateCondition('someSelected("D_632714520_1')).toBe(false); + }); + + it.fails.each(['English', 'Spanish'])(`${runtimeDefects.corpusMalformedCondition.localDefectId}: %s COVID Markdown keeps the complete grid complement`, async () => { + const authoredResponseIds = [...MALFORMED_COVID_GRID_COMPLEMENT.matchAll(/"([^"]+)"/g)] + .map(([, responseId]) => responseId); + + expect(authoredResponseIds).toEqual(expectedCovidGridResponseIds); + + const evaluateCondition = await loadEvaluator(); + expect(evaluateCondition(MALFORMED_COVID_GRID_COMPLEMENT)).toBe(false); + }); + + it.fails.each(['non200', 'reject'])( + `${runtimeDefects.storeRollback.localDefectId}: restores the snapshot after a %s store result`, + async (storeMode) => { + const quest = await renderFreshQuest({ storeMode }); + await answerAndAdvance(quest); + await vi.waitFor(() => expect(quest.root.querySelector('form.active')?.id).toBe('Q1')); + expect(quest.state.getSurveyState()).not.toHaveProperty('Q1'); + }, + ); + + it.fails(`${runtimeDefects.sequentialHostCallbacks.localDefectId}: rebinds second-render callbacks`, async () => { + const first = await renderFreshQuest(); + const secondStore = vi.fn(async () => ({ code: 200 })); + document.body.innerHTML = '
'; + await first.transform.render({ + activate: true, + text: SIMPLE_SURVEY.replace('TEST_MODULE', 'SECOND_MODULE'), + store: secondStore, + errorLogger: () => {}, + }, 'secondRoot'); + document.querySelector('#Q1_1').click(); + document.querySelector('#Q1 .next').click(); + await vi.waitFor(() => expect(secondStore).toHaveBeenCalled()); + }); + + it.fails(`${runtimeDefects.finalCompoundResponseRemoval.localDefectId}: removes the question after its final compound response is cleared`, async () => { + const appState = await loadStateManager(); + appState.setResponse('Q1', 'ONLY', 2, 'selected'); + + appState.removeResponseItem('Q1', 'ONLY', 2); + + expect(appState.getActiveQuestionState()).not.toHaveProperty('Q1'); + expect(appState.getResponseToQuestionMapping()).not.toHaveProperty('ONLY.Q1'); + expect(appState.getCache()).not.toHaveProperty('ONLY.Q1'); + }); + + it.fails(`${runtimeDefects.clearedRestoredResponseLookup.localDefectId}: does not return a restored scalar after it is cleared`, async () => { + const appState = await loadStateManager({ Q1: 'restored' }); + appState.setActiveQuestionState('Q1'); + + appState.setResponse('Q1', 'Q1', 1, ''); + + expect(appState.findResponseValue('Q1')).toBeUndefined(); + }); + + it.fails(`${runtimeDefects.unsyncedArrayResponseLookup.localDefectId}: returns a live checkbox array before storage`, async () => { + const appState = await loadStateManager(); + appState.setResponse('Q1', 'CHECKBOX', 2, ['one', 'two']); + + expect(appState.findResponseValue('CHECKBOX', 'Q1')).toEqual(['one', 'two']); + }); + + it.fails(`${runtimeDefects.malformedLoopContinuation.localDefectId}: rejects a malformed loop continuation without throwing`, async () => { + const { processor, errorLogger } = await loadQuestionProcessor(` + {"name":"MALFORMED_CONTINUE"} + [Q1] First. + [END,end] Done. + `); + let result; + + expect(() => { + result = processor.findQuestion('_CONTINUE_BAD'); + }).not.toThrow(); + expect(result).toEqual({ question: null, index: -1 }); + expect(errorLogger.mock.calls.some( + ([message]) => String(message).includes('loop index not found'), + )).toBe(true); + }); + + it.fails(`${runtimeDefects.currentQuestionUpperBoundary.localDefectId}: returns null when the current index equals the question count`, async () => { + const { processor, errorLogger } = await loadQuestionProcessor(` + {"name":"UPPER_BOUNDARY"} + [Q1] First. + [END,end] Done. + `); + processor.currentQuestionIndex = processor.questions.length; + + expect(processor.getCurrentQuestion()).toBeNull(); + expect(errorLogger).toHaveBeenCalledWith(expect.stringContaining('index out of range')); + }); + + it.fails(`${runtimeDefects.missingConfirmationTarget.localDefectId}: ignores an invalid confirmation reference without throwing`, async () => { + const { processor } = await loadQuestionProcessor(` + {"name":"MISSING_CONFIRMATION"} + [Q1] Confirm + [END,end] Done. + `); + let question; + + expect(() => { + question = processor.processQuestion(0); + }).not.toThrow(); + expect(question.querySelector('#COPY').hasAttribute('data-confirm')).toBe(false); + }); + + it.fails(`${runtimeDefects.missingQuestionId.localDefectId}: returns the documented not-found result for an absent question ID`, async () => { + const { processor, errorLogger } = await loadQuestionProcessor(` + {"name":"MISSING_ID"} + [Q1] First. + [END,end] Done. + `); + let result; + + expect(() => { + result = processor.findQuestion(); + }).not.toThrow(); + expect(result).toEqual({ question: null, index: -1 }); + expect(errorLogger.mock.calls.some( + ([message]) => String(message).includes('no questionID provided'), + )).toBe(true); + }); + + it.fails(`${runtimeDefects.explicitCombinedChoiceName.localDefectId}: preserves an authored combined-choice name exactly`, async () => { + const { processor } = await loadQuestionProcessor(` + {"name":"EXPLICIT_COMBINED_NAME"} + [Q1?] Other response. + [other|id=EXPLICIT_CHOICE name=EXPLICIT_NAME] Explain -> END + [END,end] Done. + `); + + const choice = processor.findQuestion('Q1').question.querySelector('#EXPLICIT_CHOICE'); + expect(choice.name).toBe('EXPLICIT_NAME'); + }); +}); diff --git a/tests/knownDefects/vitest.config.js b/tests/knownDefects/vitest.config.js new file mode 100644 index 0000000..477e849 --- /dev/null +++ b/tests/knownDefects/vitest.config.js @@ -0,0 +1,19 @@ +import { defineConfig } from 'vitest/config'; +import { questDependencyResolver } from '../config/moduleResolution.js'; + +export default defineConfig({ + plugins: [questDependencyResolver], + test: { + environment: 'jsdom', + environmentOptions: { + jsdom: { url: 'https://connect.test/' }, + }, + setupFiles: ['./tests/setup/jsdom.js'], + include: ['./tests/knownDefects/**/*.spec.js'], + clearMocks: true, + restoreMocks: true, + mockReset: true, + testTimeout: 15_000, + hookTimeout: 15_000, + }, +}); diff --git a/tests/quality/scripts/checkTestOnlyScope.mjs b/tests/quality/scripts/checkTestOnlyScope.mjs new file mode 100644 index 0000000..f863e0a --- /dev/null +++ b/tests/quality/scripts/checkTestOnlyScope.mjs @@ -0,0 +1,155 @@ +#!/usr/bin/env node + +import { execFileSync, spawnSync } from 'node:child_process'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +export const BOOTSTRAP_BASE_SHA = '982f24ddc133d2e0153b792521da0af4c769b0b9'; + +const SCRIPT_PATH = fileURLToPath(import.meta.url); +const REPOSITORY_ROOT = path.resolve(path.dirname(SCRIPT_PATH), '..', '..', '..'); +const ROOT_CONFIG_FILES = new Set([ + 'playwright.config.js', + 'vite.config.js', + 'vitest.config.js', +]); +const ROOT_METADATA_FILES = new Set([ + '.gitignore', + '.node-version', + '.nvmrc', + 'README.md', +]); + +export function scopeDecision(repositoryPath) { + if (!isSafeRepositoryPath(repositoryPath)) { + return { allowed: false, reason: 'path is not a safe normalized repository-relative path' }; + } + + if (repositoryPath.startsWith('i18n/')) { + return { allowed: false, reason: 'production i18n source is outside this test-only pull request' }; + } + + if (!repositoryPath.includes('/') && /\.(?:css|html)$/i.test(repositoryPath)) { + return { allowed: false, reason: 'root production CSS/HTML is outside this test-only pull request' }; + } + + if (!repositoryPath.includes('/') && repositoryPath.endsWith('.js') && !ROOT_CONFIG_FILES.has(repositoryPath)) { + return { allowed: false, reason: 'root production JavaScript is outside this test-only pull request' }; + } + + if (repositoryPath.startsWith('tests/')) return { allowed: true }; + if (repositoryPath.startsWith('.github/')) return { allowed: true }; + if (repositoryPath.startsWith('docs/')) return { allowed: true }; + if (ROOT_METADATA_FILES.has(repositoryPath)) return { allowed: true }; + if (ROOT_CONFIG_FILES.has(repositoryPath)) return { allowed: true }; + if (/^package[^/]*\.json$/.test(repositoryPath)) return { allowed: true }; + + return { allowed: false, reason: 'path is not in the bootstrap test-infrastructure allowlist' }; +} + +export function checkTestOnlyScope({ + repositoryRoot = REPOSITORY_ROOT, + baseRevision = BOOTSTRAP_BASE_SHA, + headRevision = 'HEAD', +} = {}) { + const baseSha = resolveCommit(repositoryRoot, baseRevision, 'bootstrap base'); + const headSha = resolveCommit(repositoryRoot, headRevision, 'head'); + assertAncestor(repositoryRoot, baseSha, headSha); + + const changedPaths = changedPathsBetween(repositoryRoot, baseSha, headSha); + const violations = changedPaths + .map((changedPath) => ({ path: changedPath, ...scopeDecision(changedPath) })) + .filter(({ allowed }) => !allowed) + .sort((left, right) => comparePaths(left.path, right.path)); + + if (violations.length > 0) { + throw new Error([ + 'Bootstrap test-only scope gate failed.', + `Only reviewed test infrastructure may differ from ${baseSha}.`, + ...violations.map(({ path: changedPath, reason }) => `- ${changedPath}: ${reason}`), + ].join('\n')); + } + + return { baseSha, headSha, changedPaths }; +} + +export function parseScopeCliArgs(argv) { + const options = {}; + for (let index = 0; index < argv.length; index += 1) { + const argument = argv[index]; + if (argument !== '--head') throw new Error(`Unknown test-only scope argument: ${argument}`); + const headRevision = argv[index + 1]; + if (!headRevision || headRevision.startsWith('--')) { + throw new Error('--head requires an exact revision argument.'); + } + options.headRevision = headRevision; + index += 1; + } + return options; +} + +function resolveCommit(repositoryRoot, revision, label) { + try { + const sha = execFileSync( + 'git', + ['-C', repositoryRoot, 'rev-parse', '--verify', `${revision}^{commit}`], + { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }, + ).trim(); + if (!/^[0-9a-f]{40}$/.test(sha)) throw new Error(`resolved unsupported object ID ${sha}`); + return sha; + } catch (error) { + const detail = error.stderr?.toString().trim() || error.message; + throw new Error(`Unable to resolve ${label} revision ${revision}: ${detail}`); + } +} + +function assertAncestor(repositoryRoot, baseSha, headSha) { + const result = spawnSync( + 'git', + ['-C', repositoryRoot, 'merge-base', '--is-ancestor', baseSha, headSha], + { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }, + ); + if (result.error) throw result.error; + if (result.status === 1) { + throw new Error(`Bootstrap base ${baseSha} is not an ancestor of head ${headSha}.`); + } + if (result.status !== 0) { + throw new Error(`Unable to verify bootstrap ancestry: ${result.stderr.trim() || `git exited ${result.status}`}`); + } +} + +function changedPathsBetween(repositoryRoot, baseSha, headSha) { + const output = execFileSync( + 'git', + ['-C', repositoryRoot, 'diff', '--name-only', '--no-renames', '-z', `${baseSha}...${headSha}`, '--'], + { encoding: 'buffer', stdio: ['ignore', 'pipe', 'pipe'] }, + ); + const decoded = new TextDecoder('utf-8', { fatal: true }).decode(output); + return decoded.split('\0').filter(Boolean).sort(comparePaths); +} + +function comparePaths(left, right) { + if (left < right) return -1; + if (left > right) return 1; + return 0; +} + +function isSafeRepositoryPath(repositoryPath) { + if (typeof repositoryPath !== 'string' || repositoryPath.length === 0) return false; + if (repositoryPath.startsWith('/') || repositoryPath.includes('\\')) return false; + if (/[\u0000-\u001f\u007f]/.test(repositoryPath)) return false; + const segments = repositoryPath.split('/'); + return segments.every((segment) => segment.length > 0 && segment !== '.' && segment !== '..'); +} + +if (process.argv[1] && path.resolve(process.argv[1]) === SCRIPT_PATH) { + try { + const result = checkTestOnlyScope(parseScopeCliArgs(process.argv.slice(2))); + console.log( + `Bootstrap test-only scope passed: ${result.changedPaths.length} changed path(s) from ${result.baseSha} to ${result.headSha}.`, + ); + } catch (error) { + console.error(error.message); + process.exitCode = 1; + } +} diff --git a/tests/scripts/runKnownDefects.mjs b/tests/scripts/runKnownDefects.mjs new file mode 100644 index 0000000..64e2dfa --- /dev/null +++ b/tests/scripts/runKnownDefects.mjs @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +import { spawnSync } from 'node:child_process'; +import { createRequire } from 'node:module'; + +const require = createRequire(import.meta.url); +const commands = [ + [require.resolve('vitest/vitest.mjs'), 'run', '--config', 'tests/knownDefects/vitest.config.js'], + [ + require.resolve('@playwright/test/cli'), + 'test', + '--project=chromium-desktop', + '--project=chromium-windows-ua', + '--project=firefox-desktop', + '--project=webkit-desktop', + '--grep', + '@known-defect', + ], +]; + +let failed = false; +for (const [entrypoint, ...args] of commands) { + const result = spawnSync(process.execPath, [entrypoint, ...args], { + cwd: process.cwd(), + env: process.env, + stdio: 'inherit', + }); + if (result.error) throw result.error; + if (result.status !== 0) failed = true; +} + +process.exitCode = failed ? 1 : 0; diff --git a/tests/setup/jsdom.js b/tests/setup/jsdom.js new file mode 100644 index 0000000..4b5b2f9 --- /dev/null +++ b/tests/setup/jsdom.js @@ -0,0 +1,115 @@ +import { afterEach, beforeEach, expect, vi } from 'vitest'; + +let unexpectedNetworkAttempts = []; + +function networkTarget(input) { + if (typeof input === 'string') return input; + if (input instanceof URL) return input.href; + return input?.url ?? String(input); +} + +function installOfflineNetworkBoundary() { + unexpectedNetworkAttempts = []; + + const denyFetch = vi.fn(async (input) => { + const target = networkTarget(input); + unexpectedNetworkAttempts.push({ transport: 'fetch', target }); + throw new Error(`Unexpected jsdom fetch blocked by the offline test boundary: ${target}`); + }); + Object.defineProperty(denyFetch, 'questDenyByDefault', { value: true }); + vi.stubGlobal('fetch', denyFetch); + + class OfflineXMLHttpRequest { + static questDenyByDefault = true; + + open(method, url) { + this.method = method; + this.url = networkTarget(url); + } + + send() { + const target = this.url ?? ''; + unexpectedNetworkAttempts.push({ + transport: 'XMLHttpRequest', + method: this.method ?? null, + target, + }); + throw new Error(`Unexpected jsdom XMLHttpRequest blocked by the offline test boundary: ${target}`); + } + + abort() {} + setRequestHeader() {} + } + + vi.stubGlobal('XMLHttpRequest', OfflineXMLHttpRequest); +} + +class BootstrapComponentStub { + static instances = new WeakMap(); + + constructor(element) { + this._element = element; + this.constructor.instances.set(element, this); + } + + static getInstance(element) { + return this.instances.get(element) ?? null; + } + + show() { + this._element?.classList.add('show'); + this._element?.dispatchEvent(new Event('shown.bs.modal')); + } + + hide() { + this._element?.classList.remove('show'); + this._element?.dispatchEvent(new Event('hidden.bs.modal')); + } + + dispose() { + this.constructor.instances.delete(this._element); + } +} + +beforeEach(() => { + installOfflineNetworkBoundary(); + document.documentElement.lang = 'en'; + document.body.innerHTML = ''; + + globalThis.bootstrap = { + Modal: class ModalStub extends BootstrapComponentStub {}, + Popover: class PopoverStub extends BootstrapComponentStub {}, + }; + + window.matchMedia = vi.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addListener: vi.fn(), + removeListener: vi.fn(), + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })); + + Element.prototype.scrollIntoView = vi.fn(); + URL.createObjectURL = vi.fn(() => 'blob:quest-test'); + URL.revokeObjectURL = vi.fn(); + + if (!globalThis.CSS) globalThis.CSS = {}; + if (!globalThis.CSS.escape) { + globalThis.CSS.escape = (value) => String(value).replace(/[^a-zA-Z0-9_-]/g, (match) => `\\${match}`); + } +}); + +afterEach(() => { + expect( + unexpectedNetworkAttempts, + 'jsdom attempted network access without an explicit per-test host-boundary stub', + ).toEqual([]); + vi.clearAllTimers(); + vi.useRealTimers(); + vi.unstubAllGlobals(); + document.body.innerHTML = ''; + delete globalThis.bootstrap; +}); diff --git a/tests/unit/buildGrid.spec.js b/tests/unit/buildGrid.spec.js new file mode 100644 index 0000000..dc6f8cd --- /dev/null +++ b/tests/unit/buildGrid.spec.js @@ -0,0 +1,65 @@ +import { describe, expect, it } from 'vitest'; +import { parseGrid } from '../../buildGrid.js'; + +const buttons = '
'; + +describe('parseGrid', () => { + it('renders a semantic radio grid with encoded conditions and piped values', () => { + const html = parseGrid( + '|grid?|id=GRID displayif=equals(ELIGIBLE,1)|Shared {$name} %displayif=equals(A,1)%conditional%|[ROW1]First {$u:firstName};[ROW2,displayif=equals(SHOW,1)]Second;|(1:Yes)(0:No)|', + buttons, + ); + const template = document.createElement('template'); + template.innerHTML = html; + const form = template.content.querySelector('form'); + + expect(form.id).toBe('GRID'); + expect(form.getAttribute('softedit')).toBe('true'); + expect(form.dataset.grid).toBe('true'); + expect(decodeURIComponent(form.getAttribute('displayif'))).toBe('equals(ELIGIBLE,1)'); + expect(form.querySelectorAll('tbody tr')).toHaveLength(2); + expect(form.querySelectorAll('input[type="radio"]')).toHaveLength(4); + expect(form.querySelector('#ROW1_0').value).toBe('1'); + expect(form.querySelector('span[data-gridreplace="name"]')).not.toBeNull(); + expect(form.querySelector('span[data-gridreplace="firstName"]')).not.toBeNull(); + expect(form.querySelector('.grid-displayif')).not.toBeNull(); + expect(form.querySelector('[data-displayif]')).not.toBeNull(); + expect(form.querySelector('.question-buttons')).not.toBeNull(); + }); + + it('renders checkbox grids and hard-edit prompts', () => { + const html = parseGrid( + '|grid!|id=CHECKGRID|Choose all|[ROW]A row;|[A:Alpha][B:Beta]|', + buttons, + ); + const template = document.createElement('template'); + template.innerHTML = html; + const form = template.content.querySelector('form'); + + expect(form.getAttribute('hardedit')).toBe('true'); + expect(form.getAttribute('softedit')).toBe('false'); + expect(form.querySelectorAll('input[type="checkbox"]')).toHaveLength(2); + expect(form.querySelectorAll('th[scope="col"]')).toHaveLength(2); + expect(form.querySelector('th[scope="row"]').textContent).toContain('A row'); + }); + + it('uses a plain prompt when no edit marker is authored', () => { + const html = parseGrid('|grid|id=PLAIN|Question|[ROW]Text;|(1:One)|', buttons); + const template = document.createElement('template'); + template.innerHTML = html; + const form = template.content.querySelector('form'); + + expect(form.getAttribute('hardedit')).toBe('false'); + expect(form.getAttribute('softedit')).toBe('false'); + expect(form.querySelector('thead [data-header="One"]')).not.toBeNull(); + }); + + it('makes evaluated piped values distinguishable from response lookups', () => { + const html = parseGrid('|grid|id=PIPED|{$e:1 + 1}|[ROW]{$answer};|(1:One)|', buttons); + const template = document.createElement('template'); + template.innerHTML = html; + + expect(template.content.querySelector('[data-gridreplacetype="eval"]')).not.toBeNull(); + expect(template.content.querySelector('[data-gridreplacetype="_val"]')).not.toBeNull(); + }); +}); diff --git a/tests/unit/customMath.spec.js b/tests/unit/customMath.spec.js new file mode 100644 index 0000000..bb350e7 --- /dev/null +++ b/tests/unit/customMath.spec.js @@ -0,0 +1,242 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +async function loadMathWithState(initialState = {}) { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = {}; + + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + const appState = stateModule.getStateManager(); + appState.loadInitialSurveyState(initialState); + appState.setQuestionProcessor({ + findQuestion: () => ({ question: null }), + findGridRadioCheckboxEle: () => null, + }); + + const mathModule = await import('../../customMathJSImplementation.js'); + mathModule.customMathJSFunctions.appState = appState; + return { ...mathModule, appState, moduleParams: questionnaire.moduleParams }; +} + +describe('Quest MathJS extensions', () => { + beforeEach(() => { + Object.defineProperty(navigator, 'language', { configurable: true, value: 'en-US' }); + }); + + it('normalizes, adds, subtracts, and compares year-month values at year boundaries', async () => { + const { YearMonth } = await loadMathWithState(); + const value = new YearMonth('2025-12'); + + expect(value.toString()).toBe('2025-12'); + expect(new YearMonth(value).toString()).toBe('2025-12'); + expect(value.add(1)).toBe('2026-01'); + expect(new YearMonth('2025-03').add(1)).toBe('2025-04'); + expect(new YearMonth('2026-01').subtract(1)).toBe('2025-12'); + expect(new YearMonth('2026-03').subtract(1)).toBe('2026-02'); + expect(new YearMonth('2026-03').subMonth(new YearMonth('2025-11'))).toBe(4); + expect(() => new YearMonth('03/2026')).toThrow('Invalid YearMonth format'); + }); + + it('looks up scalar, array, object, nested, numeric, and missing values', async () => { + const { customMathJSFunctions: fn } = await loadMathWithState({ + SCALAR: 'yes', + EMPTY: '', + CHECKS: ['1', '2'], + OBJECT: { NESTED: 'value' }, + }); + + expect(fn.exists('SCALAR')).toBe(true); + expect(fn.exists('EMPTY')).toBe(false); + expect(fn.exists(null)).toBe(false); + expect(fn.exists('CHECKS')).toBe(true); + expect(fn.exists('MISSING')).toBe(false); + expect(fn.exists(0)).toBe(true); + expect(fn.getKeyedValue('not a response sentence.')).toBeUndefined(); + expect(() => fn.getKeyedValue('MISSING.LEAF')).toThrow(TypeError); + expect(fn.getKeyedValue('OBJECT.MISSING.DEEP')).toBeUndefined(); + expect(fn._value(125)).toBe(125); + expect(fn._value('MISSING')).toBeNull(); + }); + + it('evaluates existence composition, equality, sets, ranges, and defaults', async () => { + const { customMathJSFunctions: fn } = await loadMathWithState({ + ANSWER: '2', + CHECKS: ['1', '3'], + CONCEPTS: '123456789,987654321', + COUNT: '5', + }); + + expect(fn.doesNotExist('MISSING')).toBe(true); + expect(fn.noneExist('A', 'B')).toBe(true); + expect(fn.someExist('A', 'ANSWER')).toBe(true); + expect(fn.allExist('ANSWER', 'CHECKS')).toBe(true); + expect(fn.valueEquals('ANSWER', 2)).toBe(true); + expect(fn.valueEquals('MISSING', 2)).toBe(false); + expect(fn.valueIsOneOf('CHECKS', 3, 9)).toBe(true); + expect(fn.valueIsOneOf('MISSING', 3, 9)).toBe(false); + expect(fn.valueIsOneOf('CONCEPTS', '987654321')).toBe(true); + expect(fn.valueIsBetween(1, 10, 'COUNT')).toBe(true); + expect(() => fn.valueIsBetween(1, 10, 'MISSING', 'COUNT')).toThrow('Key(s) must be strings'); + expect(fn.valueIsBetween(6, 10, 'COUNT')).toBe(false); + expect(fn.valueOrDefault('MISSING', 'ANSWER', 99)).toBe('2'); + expect(fn.valueLength('ANSWER')).toBe(1); + expect(fn.valueLength('MISSING')).toBe(false); + expect(fn.valueIsBetween(undefined, 10, 'COUNT')).toBe(false); + expect(fn.valueIsBetween(1, 10, 'MISSING')).toBe(false); + }); + + it('distinguishes MathJS scalar equality from legacy checkbox-membership equality', async () => { + const { + customMathJSFunctions: fn, + initializeCustomMathJSFunctions, + math, + } = await loadMathWithState({ CHECKS: ['1', '3'] }); + initializeCustomMathJSFunctions(); + const { evaluateCondition } = await import('../../evaluateConditions.js'); + + // Quoted IDs stay in the MathJS path and use scalar coercion. Legacy + // authored expressions use a bare response ID. MathJS rejects that symbol + // and Quest's fallback evaluator correctly treats equals as membership. + expect(fn.valueEquals('CHECKS', 1)).toBe(false); + expect(fn.equals('CHECKS', 3)).toBe(false); + expect(math.evaluate('equals("CHECKS", 1)')).toBe(false); + expect(evaluateCondition('equals(CHECKS,1)')).toBe(true); + expect(evaluateCondition('equals(CHECKS,2)')).toBe(false); + expect(fn.valueIsOneOf('CHECKS', 1, 9)).toBe(true); + }); + + it('unwraps legacy combo objects and reports response types that existence cannot interpret', async () => { + vi.spyOn(console, 'error').mockImplementation(() => {}); + const { customMathJSFunctions: fn, moduleParams } = await loadMathWithState({ + COMBO: { COMBO: '2', OTHER: 'detail' }, + BOOLEAN: true, + }); + + expect(fn.valueEquals('COMBO', 2)).toBe(true); + expect(fn.valueIsOneOf('COMBO', 1, 2)).toBe(true); + expect(fn.exists('BOOLEAN')).toBe(false); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('unhandled case in EXISTS')); + expect(fn.getKeyedValue('NO_DOT')).toBeUndefined(); + }); + + it('unwraps combo-shaped values before equality and one-of comparisons', async () => { + const { customMathJSFunctions: fn } = await loadMathWithState(); + fn.appState = { + findResponseValue: () => ({ COMBO: '2', OTHER: 'detail' }), + }; + + expect(fn.equals('COMBO', 2)).toBe(true); + expect(fn.valueIsOneOf('COMBO', 2, 3)).toBe(true); + expect(fn.valueLength('COMBO')).toBe(-1); + }); + + it('handles fixed arithmetic/date helpers and invalid selections safely', async () => { + const { customMathJSFunctions: fn } = await loadMathWithState(); + + expect(fn.dateCompare(0, 2026, 1, 2026)).toBe(-1); + expect(fn.dateCompare(1, 2026, 1, 2026)).toBe(0); + expect(fn.dateCompare(2, 2026, 1, 2026)).toBe(1); + expect(fn.yearMonth('2026-04').toString()).toBe('2026-04'); + expect(fn.yearMonth('not-a-month')).toBe(false); + expect(fn.isSelected('ROW_VALUE_0')).toBe(false); + expect(fn.someSelected('ROW_VALUE_0')).toBe(false); + expect(fn.noneSelected('ROW_VALUE_0')).toBe(true); + expect(fn.valueIsBetween(1, 10, 'not-numeric')).toBe(false); + expect(() => fn.dateCompare(1, 'bad-year', 1, 2026)).toThrow('years need to be numeric'); + }); + + it('finds selected grid cells and resolves year-month values stored in state', async () => { + const { customMathJSFunctions: fn, appState } = await loadMathWithState({ + ROW_VALUE: '2', + STORED_MONTH: '2026-07', + }); + appState.setQuestionProcessor({ + findGridRadioCheckboxEle: (id) => id === 'ROW_VALUE_1' ? '2' : null, + findQuestion: () => ({ question: null }), + }); + + expect(fn.isSelected('ROW_VALUE_1')).toBe(true); + expect(fn.isSelected('ROW_VALUE_2')).toBe(false); + expect(fn.someSelected('ROW_VALUE_2', 'ROW_VALUE_1')).toBe(true); + expect(fn.noneSelected('ROW_VALUE_2')).toBe(true); + expect(fn.yearMonth('STORED_MONTH').toString()).toBe('2026-07'); + + appState.setQuestionProcessor({ + findGridRadioCheckboxEle: () => '2', + findQuestion: () => ({ question: null }), + }); + expect(fn.isSelected('INVALID_ID')).toBe(false); + appState.loadInitialSurveyState({}); + expect(fn.isSelected('ROW_VALUE_1')).toBe(false); + }); + + it('counts nested checkbox groups and joins conditionally existing display values', async () => { + const { customMathJSFunctions: fn, appState, initializeCustomMathJSFunctions } = await loadMathWithState({ + Q: { GROUP: ['1', '2'] }, + A: 'yes', + }); + const form = document.createElement('form'); + form.innerHTML = ` + + + `; + appState.setQuestionProcessor({ + findQuestion: () => ({ question: form }), + findGridRadioCheckboxEle: () => null, + }); + initializeCustomMathJSFunctions(); + + expect(fn.selectionCount('Q:GROUP')).toBe(2); + expect(fn.existingValues('displayList(exists("A"),"Alpha",exists("B"),"Beta")')).toBe('Alpha'); + expect(fn.existingValues('displayList(exists("A"),"Alpha",exists("Q"),"Questions",sep=" / ")')).toBe('Alpha / Questions'); + expect(fn.existingValues()).toBe(''); + + appState.setQuestionProcessor({ + findQuestion: () => ({ question: null }), + findGridRadioCheckboxEle: () => null, + }); + expect(fn.selectionCount('Q:GROUP')).toBe(2); + }); + + it('counts regular and reset checkbox selections from processed question HTML', async () => { + const { customMathJSFunctions: fn, appState } = await loadMathWithState({ Q: ['1', '99'] }); + const form = document.createElement('form'); + form.innerHTML = ` + + + `; + appState.setQuestionProcessor({ + findQuestion: () => ({ question: form }), + findGridRadioCheckboxEle: () => null, + }); + + expect(fn.selectionCount('Q')).toBe(0); + expect(fn.selectionCount('Q', true)).toBe(2); + expect(fn.selectionCount('MISSING')).toBe(0); + + fn.appState.findResponseValue = (id) => id === 'SCALAR' ? 'one' : undefined; + expect(fn.selectionCount('SCALAR')).toBe(0); + }); + + it('registers custom functions at the top level for authored MathJS expressions', async () => { + const { initializeCustomMathJSFunctions, math, customMathJSFunctions: fn } = await loadMathWithState({ ANSWER: '1' }); + initializeCustomMathJSFunctions(); + + expect(math.evaluate('exists("ANSWER")')).toBe(true); + expect(math.evaluate('valueIsOneOf("ANSWER", 1, 2)')).toBe(true); + expect(math.evaluate('yearMonth("2025-12") + 1')).toBe('2026-01'); + expect(fn.add(1, new fn.YearMonth('2025-12'))).toBe('2026-01'); + expect(fn.add(1, 2)).toBe(3); + expect(fn.add('1.5', '2.5')).toBe(4); + expect(fn.add(true, '2')).toBeNaN(); + expect(fn.add({}, {})).toBeNaN(); + expect(fn.subtract(new fn.YearMonth('2026-01'), 1)).toBe('2025-12'); + expect(fn.subtract(new fn.YearMonth('2026-03'), new fn.YearMonth('2025-12'))).toBe(3); + expect(fn.subtract(5, 2)).toBe(3); + expect(fn.subtract('5.5', '2.5')).toBe(3); + expect(fn.subtract(true, '2')).toBeNaN(); + expect(fn.subtract({}, {})).toBeNaN(); + }); +}); diff --git a/tests/unit/evaluateConditions.spec.js b/tests/unit/evaluateConditions.spec.js new file mode 100644 index 0000000..dc33ace --- /dev/null +++ b/tests/unit/evaluateConditions.spec.js @@ -0,0 +1,67 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +async function loadEvaluator(state = {}, previousResults = {}) { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.previousResults = previousResults; + + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(); + stateModule.getStateManager().loadInitialSurveyState(state); + const { evaluateCondition } = await import('../../evaluateConditions.js'); + return { evaluateCondition, moduleParams: questionnaire.moduleParams }; +} + +describe('condition evaluation', () => { + beforeEach(() => vi.useRealTimers()); + + it('uses MathJS for arithmetic, boolean expressions, and URI-encoded input', async () => { + const { evaluateCondition } = await loadEvaluator(); + + expect(evaluateCondition('2 + 3 * 4')).toBe(14); + expect(evaluateCondition('2%20%3C%203')).toBe(true); + expect(evaluateCondition('true and not false')).toBe(true); + }); + + it('falls back to legacy functions with state and previous-result values', async () => { + const { evaluateCondition } = await loadEvaluator( + { ANSWER: '2', CHECKS: ['1', '3'] }, + { PRIOR: '1' }, + ); + + expect(evaluateCondition('equals(ANSWER,2)')).toBe(true); + expect(evaluateCondition('doesNotEqual(ANSWER,3)')).toBe(true); + expect(evaluateCondition('equals(CHECKS,3)')).toBe(true); + expect(evaluateCondition('equals(PRIOR,1)')).toBe(true); + expect(evaluateCondition('greaterThan(ANSWER,1)')).toBe(true); + }); + + it('evaluates nested two-argument legacy functions inside out', async () => { + const { evaluateCondition } = await loadEvaluator({ A: '1', B: '0' }); + + expect(evaluateCondition('and(equals(A,1),doesNotEqual(B,1))')).toBe(true); + expect(evaluateCondition('or(equals(A,9),equals(B,0))')).toBe(true); + }); + + it('preserves legacy numeric, boolean, undefined, loop, and missing arguments', async () => { + const { evaluateCondition } = await loadEvaluator(); + + expect(evaluateCondition('equals(12,12)')).toBe(true); + expect(evaluateCondition('equals(true,true)')).toBe(false); + expect(evaluateCondition('equals(undefined,undefined)')).toBe(true); + expect(evaluateCondition('equals(#loop,#loop)')).toBe(true); + expect(evaluateCondition('equals(MISSING,undefined)')).toBe(false); + }); + + it('reports malformed fallback syntax with the original expression and stack', async () => { + const { evaluateCondition, moduleParams } = await loadEvaluator(); + + expect(() => evaluateCondition('notAFunction(A,1)')).toThrow(); + expect(moduleParams.errorLogger).toHaveBeenCalledWith( + 'Error in Displayif Function:', + 'notAFunction(A,1)', + expect.any(Array), + ); + }); +}); diff --git a/tests/unit/knownDefectRegistry.spec.js b/tests/unit/knownDefectRegistry.spec.js new file mode 100644 index 0000000..5ca709b --- /dev/null +++ b/tests/unit/knownDefectRegistry.spec.js @@ -0,0 +1,20 @@ +import { describe, expect, it } from 'vitest'; +import { allKnownDefects } from '../knownDefects/registry.js'; + +describe('known-defect policy registry', () => { + it('keeps every accepted defect owned, traceable, reasoned, and unexpired', () => { + const today = new Date().toISOString().slice(0, 10); + const ids = new Set(); + + for (const entry of allKnownDefects) { + expect(entry.localDefectId).toMatch(/^(?:QD-|CONNECT-)/); + expect(ids.has(entry.localDefectId), `duplicate local defect ID: ${entry.localDefectId}`).toBe(false); + ids.add(entry.localDefectId); + expect(entry.owner).toBeTruthy(); + expect(entry.target).toBeTruthy(); + expect(entry.reason).toBeTruthy(); + expect(entry.expiry).toMatch(/^\d{4}-\d{2}-\d{2}$/); + expect(entry.expiry.localeCompare(today), `${entry.localDefectId} expired on ${entry.expiry}`).toBeGreaterThanOrEqual(0); + } + }); +}); diff --git a/tests/unit/knownFunctions.spec.js b/tests/unit/knownFunctions.spec.js new file mode 100644 index 0000000..1547604 --- /dev/null +++ b/tests/unit/knownFunctions.spec.js @@ -0,0 +1,73 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { knownFunctions } from '../../knownFunctions.js'; + +describe('knownFunctions', () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(new Date('2026-01-15T12:00:00.000Z')); + }); + + afterEach(() => vi.useRealTimers()); + + it('evaluates boolean composition', () => { + expect(knownFunctions.and(true, 'value')).toBe('value'); + expect(knownFunctions.and(false, 'value')).toBe(false); + expect(knownFunctions.or('', 'fallback')).toBe('fallback'); + expect(knownFunctions.or('first', 'fallback')).toBe('first'); + expect(knownFunctions.isNotDefined('')).toBe(true); + expect(knownFunctions.isNotDefined('set')).toBe(false); + expect(knownFunctions.setFalse('ignored', 'ignored')).toBe(false); + }); + + it('resolves defined values, numeric fallbacks, and state-backed identifiers', () => { + const appState = { findResponseValue: vi.fn((key) => key === 'KNOWN' ? 'stored' : undefined) }; + + expect(knownFunctions.isDefined('4', '9', appState)).toBe('4'); + expect(knownFunctions.isDefined('', '9', appState)).toBe('9'); + expect(knownFunctions.isDefined('KNOWN', 'fallback', appState)).toBe('stored'); + expect(knownFunctions.isDefined('MISSING', 'fallback', appState)).toBe('fallback'); + }); + + it('calculates minimum and maximum while ignoring nonnumeric operands', () => { + expect(knownFunctions.min('', '')).toBe(''); + expect(knownFunctions.max('', '')).toBe(''); + expect(knownFunctions.min('3.5', '7')).toBe(3.5); + expect(knownFunctions.min('unknown', '7')).toBe(7); + expect(knownFunctions.max('3.5', '7')).toBe(7); + expect(knownFunctions.max('3.5', 'unknown')).toBe(3.5); + }); + + it('compares scalar, array, boolean, undefined, quoted, and current-date values', () => { + expect(knownFunctions.equals(undefined, 'undefined')).toBe(true); + expect(knownFunctions.doesNotEqual(undefined, 'undefined')).toBe(false); + expect(knownFunctions.equals('hello', '"hello"')).toBe(true); + expect(knownFunctions.equals(true, 'true')).toBe(true); + expect(knownFunctions.equals(false, 'false')).toBe(true); + expect(knownFunctions.doesNotEqual(false, 'true')).toBe(true); + expect(knownFunctions.doesNotEqual(true, 'false')).toBe(true); + expect(knownFunctions.equals('2026-01-15', '_TODAY_')).toBe(true); + expect(knownFunctions.doesNotEqual('2026-01-14', '_TODAY_')).toBe(true); + expect(knownFunctions.equals(['1', '2'], '2')).toBe(true); + expect(knownFunctions.doesNotEqual(['1', '2'], '3')).toBe(true); + expect(knownFunctions.equals('1', '2')).toBe(false); + expect(knownFunctions.doesNotEqual('1', '1')).toBe(false); + }); + + it('evaluates numeric comparisons and arithmetic', () => { + expect(knownFunctions.lessThan('1', '2')).toBe(true); + expect(knownFunctions.lessThanOrEqual('2', '2')).toBe(true); + expect(knownFunctions.greaterThan('3', '2')).toBe(true); + expect(knownFunctions.greaterThanOrEqual('3', '3')).toBe(true); + expect(knownFunctions.difference('10', '3')).toBe(7); + expect(knownFunctions.sum('10', '3')).toBe(13); + expect(knownFunctions.percentDiff('10', '3')).toBeCloseTo(0.7); + }); + + it('returns NaN for invalid percentage inputs and counts choices safely', () => { + expect(knownFunctions.percentDiff(null, '2')).toBeNaN(); + expect(knownFunctions.percentDiff('2', null)).toBeNaN(); + expect(knownFunctions.percentDiff(2, '1')).toBeNaN(); + expect(knownFunctions.numberOfChoicesSelected(undefined)).toBe(0); + expect(knownFunctions.numberOfChoicesSelected(['a', 'b'])).toBe(2); + }); +}); diff --git a/tests/unit/stateManager.spec.js b/tests/unit/stateManager.spec.js new file mode 100644 index 0000000..e7fec17 --- /dev/null +++ b/tests/unit/stateManager.spec.js @@ -0,0 +1,386 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +async function createManager(initialState = {}, store = vi.fn(async () => ({ code: 200 }))) { + vi.resetModules(); + const questionnaire = await import('../../questionnaire.js'); + questionnaire.moduleParams.questName = 'STATE_TEST'; + questionnaire.moduleParams.previousResults = { PRIOR: 7 }; + questionnaire.moduleParams.errorLogger = vi.fn(); + questionnaire.moduleParams.questDiv = document.body; + questionnaire.questionQueue.clear(); + questionnaire.questionQueue.add('Q1'); + questionnaire.questionQueue.next(); + + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(store, initialState); + const manager = stateModule.getStateManager(); + const questionProcessor = { + checkLoopMaxData: vi.fn(), + findQuestion: vi.fn(() => ({ question: null })), + findGridRadioCheckboxEle: vi.fn(() => null), + }; + manager.setQuestionProcessor(questionProcessor); + return { + manager, + moduleParams: questionnaire.moduleParams, + questionProcessor, + questionQueue: questionnaire.questionQueue, + store, + }; +} + +describe('state manager', () => { + beforeEach(() => { + document.body.innerHTML = '
'; + }); + + it('stores primitive and compound active response shapes and removes them', async () => { + const { manager } = await createManager(); + + manager.setNumResponseInputs('Q1', 1); + manager.setResponse('Q1', 'Q1', 1, 'yes'); + expect(manager.getActiveQuestionState()).toEqual({ Q1: 'yes' }); + + manager.removeResponse('Q1'); + expect(manager.getActiveQuestionState()).toEqual({ Q1: undefined }); + + manager.setNumResponseInputs('Q2', 2); + manager.setResponse('Q2', 'ROW_A', 2, '1'); + manager.setResponse('Q2', 'ROW_B', 2, ['2', '3']); + expect(manager.getActiveQuestionState()).toEqual({ Q1: undefined, Q2: { ROW_A: '1', ROW_B: ['2', '3'] } }); + + manager.removeResponseItem('Q2', 'ROW_A', 2); + expect(manager.getActiveQuestionState().Q2).toEqual({ ROW_A: undefined, ROW_B: ['2', '3'] }); + + manager.removeResponse('Q2'); + expect(manager.getActiveQuestionState().Q2).toBeUndefined(); + + manager.setResponse('Q3', 'Q3', 1, 'temporary'); + manager.setResponse('Q3', 'Q3', 1, ''); + expect(manager.getActiveQuestionState().Q3).toBeUndefined(); + }); + + it('keeps live response mappings and cache entries coherent through removals', async () => { + const { manager } = await createManager(); + + manager.setResponse('SINGLE', 'SINGLE', 1, 'yes'); + manager.setResponse('MULTI', 'FIRST', 2, 'one'); + manager.setResponse('MULTI', 'SECOND', 2, ['two', 'three']); + + expect(manager.getResponseToQuestionMapping()).toEqual({ + SINGLE: 'SINGLE', + 'FIRST.MULTI': 'MULTI.FIRST', + 'SECOND.MULTI': 'MULTI.SECOND', + }); + expect(manager.getCache()).toEqual({ + SINGLE: 'yes', + 'FIRST.MULTI': 'one', + 'SECOND.MULTI': ['two', 'three'], + }); + expect(manager.findResponseValue('SINGLE')).toBe('yes'); + expect(manager.findResponseValue('FIRST', 'MULTI')).toBe('one'); + + manager.removeResponseItem('SINGLE', 'SINGLE', 1); + manager.setResponse('MULTI', 'FIRST', 2, ''); + manager.removeResponseItem('MISSING', 'MISSING', 1); + + expect(manager.getResponseToQuestionMapping()).toEqual({ + 'SECOND.MULTI': 'MULTI.SECOND', + }); + expect(manager.getCache()).toEqual({ + 'SECOND.MULTI': ['two', 'three'], + }); + expect(manager.findResponseValue('SINGLE')).toBeUndefined(); + expect(manager.findResponseValue('FIRST', 'MULTI')).toBeUndefined(); + }); + + it('preserves direct stored-value shapes and numeric Concept ID boundaries', async () => { + const { manager } = await createManager({ + DIRECT_ARRAY: ['one', 'two'], + FALSE_VALUE: false, + MULTI_VALUE: { FIRST: 'one', SECOND: 'two' }, + SINGLE_WRAPPER: { ONLY: 'unwrapped' }, + ZERO_VALUE: 0, + 123456789: 'concept-value', + }); + + expect(manager.getItem('DIRECT_ARRAY')).toEqual(['one', 'two']); + expect(manager.findResponseValue('DIRECT_ARRAY')).toEqual(['one', 'two']); + expect(manager.findResponseValue('FALSE_VALUE')).toBe(false); + expect(manager.findResponseValue('MULTI_VALUE')).toEqual({ FIRST: 'one', SECOND: 'two' }); + expect(manager.findResponseValue('SINGLE_WRAPPER')).toBe('unwrapped'); + expect(manager.findResponseValue('ZERO_VALUE')).toBe(0); + expect(manager.findResponseValue('123456789')).toBe('concept-value'); + expect(manager.findResponseValue('99999999')).toBe('99999999'); + expect(manager.findResponseValue('1000000000')).toBe('1000000000'); + }); + + it('loads nested state and builds deterministic response mappings and cache entries', async () => { + const { manager } = await createManager(); + manager.loadInitialSurveyState({ + Q1: 'one', + Q2: { ROW_A: 'yes', ROW_B: ['1', '2'] }, + treeJSON: 'ignored-in-mapping', + }); + + expect(manager.getResponseToQuestionMapping()).toEqual({ + Q1: 'Q1', + 'ROW_A.Q2': 'Q2.ROW_A', + 'ROW_B.Q2': 'Q2.ROW_B', + }); + expect(manager.findResponseValue('Q1')).toBe('one'); + expect(manager.findResponseValue('ROW_A', 'Q2')).toBe('yes'); + expect(manager.findResponseValue('ROW_B', 'Q2')).toEqual(['1', '2']); + expect(manager.findResponseValue('PRIOR')).toBe('7'); + expect(manager.findResponseValue('42')).toBe('42'); + }); + + it('resolves unique nested and nonalphabetic keys while retaining falsey cached values', async () => { + const { manager, moduleParams } = await createManager(); + manager.loadInitialSurveyState({ + Q1: { UNIQUE: 'value', D_123_1: 'coded-value' }, + Q2: { ZERO: 0, FALSE: false, EMPTY: [] }, + treeJSON: 'ignored-in-mapping', + }); + + expect(manager.findResponseValue('UNIQUE')).toBe('value'); + expect(manager.findResponseValue('D_123_1')).toBe('coded-value'); + expect(manager.findResponseValue('ZERO')).toBe(0); + expect(manager.findResponseValue('FALSE')).toBe(false); + expect(manager.findResponseValue('EMPTY')).toEqual([]); + expect(manager.getCache()).toMatchObject({ + 'ZERO.Q2': 0, + 'FALSE.Q2': false, + 'EMPTY.Q2': [], + }); + expect(moduleParams.errorLogger).not.toHaveBeenCalled(); + }); + + it('sets and clears the active response when navigating restored questions', async () => { + const { manager } = await createManager(); + manager.loadInitialSurveyState({ Q1: 'saved', Q2: { FIELD: 'value' } }); + + manager.setActiveQuestionState('Q1'); + expect(manager.getActiveQuestionState()).toEqual({ Q1: 'saved' }); + manager.clearActiveQuestionState(); + expect(manager.getActiveQuestionState()).toEqual({}); + manager.setActiveQuestionState('MISSING'); + expect(manager.getActiveQuestionState()).toEqual({}); + }); + + it('returns top-level state snapshots and clears indexes when retrieved data is empty', async () => { + const { manager } = await createManager(); + manager.loadInitialSurveyState({ Q1: 'saved' }); + + const surveySnapshot = manager.getSurveyState(); + const mappingSnapshot = manager.getResponseToQuestionMapping(); + const cacheSnapshot = manager.getCache(); + surveySnapshot.Q1 = 'changed outside the manager'; + mappingSnapshot.Q1 = 'changed outside the manager'; + cacheSnapshot.Q1 = 'changed outside the manager'; + + expect(manager.getSurveyState()).toEqual({ Q1: 'saved' }); + expect(manager.getResponseToQuestionMapping()).toEqual({ Q1: 'Q1' }); + expect(manager.getCache()).toEqual({ Q1: 'saved' }); + + manager.loadInitialSurveyState(null); + expect(manager.getSurveyState()).toEqual({}); + expect(manager.getResponseToQuestionMapping()).toEqual({}); + expect(manager.getCache()).toEqual({}); + }); + + it('delegates valid question lookup through the configured processor', async () => { + const { manager, questionProcessor } = await createManager(); + const question = document.createElement('form'); + question.id = 'Q2'; + questionProcessor.findQuestion.mockReturnValue({ question }); + + expect(manager.getQuestionProcessor()).toBe(questionProcessor); + expect(manager.getQuestionHTMLByID('Q2')).toBe(question); + expect(questionProcessor.findQuestion).toHaveBeenCalledWith('Q2'); + }); + + it('namespaces changed values and legacy tree JSON when syncing to the host store', async () => { + const { manager, questionProcessor, store } = await createManager(); + const next = document.querySelector('.next'); + manager.setResponse('Q1', 'Q1', 1, 'answer'); + + manager.syncToStore(next); + await vi.waitFor(() => expect(store).toHaveBeenCalledOnce()); + + const payload = store.mock.calls[0][0]; + expect(Object.keys(payload).sort()).toEqual(['STATE_TEST.Q1', 'STATE_TEST.treeJSON']); + expect(payload['STATE_TEST.Q1']).toBe('answer'); + expect(JSON.parse(payload['STATE_TEST.treeJSON'])).toMatchObject({ currentNode: 'Q1' }); + expect(questionProcessor.checkLoopMaxData).toHaveBeenCalledWith('Q1', 'answer'); + expect(manager.getSurveyState().Q1).toBe('answer'); + expect(manager.getActiveQuestionState()).toEqual({}); + + store.mockClear(); + questionProcessor.checkLoopMaxData.mockClear(); + manager.syncToStore(next); + await vi.waitFor(() => expect(store).toHaveBeenCalledOnce()); + + expect(store.mock.calls[0][0]).toEqual({ + 'STATE_TEST.treeJSON': expect.any(String), + }); + expect(questionProcessor.checkLoopMaxData).not.toHaveBeenCalled(); + }); + + it('sends an explicit namespaced clear when a single response is removed', async () => { + const { manager, store } = await createManager(); + manager.setResponse('Q1', 'Q1', 1, 'answer'); + manager.removeResponseItem('Q1', 'Q1', 1); + + manager.syncToStore(document.querySelector('.next')); + await vi.waitFor(() => expect(store).toHaveBeenCalledOnce()); + + expect(store.mock.calls[0][0]).toHaveProperty('STATE_TEST.Q1', undefined); + expect(manager.getSurveyState()).toHaveProperty('Q1', undefined); + }); + + it('submits completion metadata without mutating the production payload contract', async () => { + const { manager, store } = await createManager(); + + await expect(manager.submitSurvey()).resolves.toEqual({ code: 200 }); + const payload = store.mock.calls[0][0]; + expect(payload['STATE_TEST.COMPLETED']).toBe(true); + expect(payload['STATE_TEST.COMPLETED_TS']).toBeInstanceOf(Date); + expect(JSON.parse(payload['STATE_TEST.treeJSON'])).toMatchObject({ currentNode: 'Q1' }); + }); + + it('propagates submit-store rejection to the host caller', async () => { + const storeError = new Error('Synthetic submit rejection'); + const store = vi.fn(async () => { + throw storeError; + }); + const { manager } = await createManager({}, store); + + await expect(manager.submitSurvey()).rejects.toBe(storeError); + expect(store).toHaveBeenCalledOnce(); + }); + + it('rejects invalid state keys instead of creating ambiguous state', async () => { + const { manager, moduleParams } = await createManager(); + + expect(() => manager.setResponse(null, 'key', 1, 'value')).toThrow('must be strings'); + expect(() => manager.getItem(null)).toThrow('must be a string'); + expect(() => manager.findResponseValue(null)).toThrow('must be strings'); + expect(() => manager.removeResponse(3)).toThrow('must be a string'); + expect(() => manager.setActiveQuestionState(3)).toThrow('must be a string'); + expect(() => manager.getQuestionHTMLByID(3)).toThrow('must be a string'); + expect(() => manager.removeResponseItem('Q', 4, 2)).toThrow('must be strings'); + manager.loadInitialSurveyState({ Q: 'primitive' }); + manager.setActiveQuestionState('Q'); + expect(() => manager.removeResponseItem('Q', 'nested', 2)).toThrow('Key not found'); + expect(moduleParams.errorLogger).not.toHaveBeenCalled(); + }); + + it('clears all runtime state while retaining a usable manager instance', async () => { + const { manager } = await createManager(); + manager.loadInitialSurveyState({ Q1: 'saved' }); + manager.setActiveQuestionState('Q1'); + + manager.clearAllState(); + + expect(manager.getSurveyState()).toEqual({}); + expect(manager.getActiveQuestionState()).toEqual({}); + expect(manager.getResponseToQuestionMapping()).toEqual({}); + expect(manager.getCache()).toEqual({}); + expect(manager.getQuestionProcessor()).toBeNull(); + }); + + it('clears the existing manager when the module graph is initialized again', async () => { + const { manager } = await createManager(); + manager.loadInitialSurveyState({ Q1: 'saved' }); + manager.setActiveQuestionState('Q1'); + + const stateModule = await import('../../stateManager.js'); + stateModule.initializeStateManager(vi.fn(async () => ({ code: 200 })), { Q2: 'ignored' }); + + expect(stateModule.getStateManager()).toBe(manager); + expect(manager.getSurveyState()).toEqual({}); + expect(manager.getActiveQuestionState()).toEqual({}); + }); + + it('manages response-input count caching and clears entries for inactive forms', async () => { + const { manager } = await createManager(); + manager.setNumResponseInputs('Q1', 2); + manager.setNumResponseInputs('Q2', 4); + expect(manager.getNumResponseInputs('Q1')).toBe(2); + expect(manager.getNumResponseInputs('Q2')).toBe(4); + + manager.clearOtherResponseInputEntries('Q2'); + expect(manager.getNumResponseInputs('Q1')).toBeUndefined(); + expect(manager.getNumResponseInputs('Q2')).toBe(4); + }); + + it('returns direct object responses and disambiguates duplicate nested response keys', async () => { + const { manager, moduleParams } = await createManager(); + manager.loadInitialSurveyState({ + COMBO: { FIRST: '1', SECOND: '2' }, + Q1: { NAME: 'Alpha' }, + Q2: { NAME: 'Beta' }, + Q: { Q: 'self-keyed' }, + }); + + expect(manager.findResponseValue('COMBO')).toEqual({ FIRST: '1', SECOND: '2' }); + expect(manager.findResponseValue('Q')).toBe('self-keyed'); + expect(manager.findResponseValue('NAME')).toBe('Alpha'); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('Multiple candidate keys found')); + expect(manager.findResponseValue('NA')).toBeUndefined(); + expect(moduleParams.errorLogger).toHaveBeenCalledWith(expect.stringContaining('No exact match found for NA')); + }); + + it('detects circular response objects while keeping non-circular keys available', async () => { + const { manager, moduleParams } = await createManager(); + const circular = { VALUE: 'available' }; + circular.SELF = circular; + + manager.loadInitialSurveyState({ Q: circular }); + + expect(manager.findResponseValue('VALUE', 'Q')).toBe('available'); + expect(moduleParams.errorLogger).toHaveBeenCalledWith('Error: Circular reference found in QuestionIDMapping -> traverse()'); + }); + + it('logs a filtered renderer snapshot and supports a hostless store/submit boundary', async () => { + const { manager, moduleParams } = await createManager({ + NULL_VALUE: null, + NESTED: { KEEP: 'yes', DROP: undefined, ARRAY: ['one', undefined] }, + }, null); + const log = vi.spyOn(console, 'log').mockImplementation(() => {}); + moduleParams.isRenderer = true; + manager.setResponse('Q1', 'Q1', 1, 'answer'); + + manager.syncToStore(document.querySelector('.next')); + + expect(log).toHaveBeenCalledWith('StateManager -> SURVEY STATE:', { + NESTED: { KEEP: 'yes', ARRAY: ['one'] }, + Q1: 'answer', + }); + expect(await manager.submitSurvey()).toBeUndefined(); + }); + + it('logs invalid store rollback click types and automatically hides the recovery modal', async () => { + vi.useFakeTimers(); + document.body.innerHTML += '
'; + const store = vi.fn(async () => ({ code: 503 })); + const { manager, moduleParams } = await createManager({ PREVIOUS: 'saved' }, store); + const button = document.createElement('button'); + button.dataset.clickType = 'unknown'; + manager.setResponse('Q1', 'Q1', 1, 'answer'); + + manager.syncToStore(button); + await vi.waitFor(() => expect(moduleParams.errorLogger).toHaveBeenCalledWith('Invalid click type (handleStoreError):', 'unknown')); + expect(document.querySelector('#storeErrorModal').classList).toContain('show'); + await vi.runAllTimersAsync(); + expect(document.querySelector('#storeErrorModal').classList).not.toContain('show'); + }); + + it('returns null to renderer callers before initialization and throws for runtime callers', async () => { + vi.resetModules(); + const { getStateManager } = await import('../../stateManager.js'); + expect(getStateManager(true)).toBeNull(); + expect(() => getStateManager()).toThrow('has not been initialized'); + }); +}); diff --git a/tests/unit/testOnlyScope.spec.js b/tests/unit/testOnlyScope.spec.js new file mode 100644 index 0000000..8c620ab --- /dev/null +++ b/tests/unit/testOnlyScope.spec.js @@ -0,0 +1,156 @@ +import { execFileSync } from 'node:child_process'; +import { mkdtemp, mkdir, rename, rm, writeFile } from 'node:fs/promises'; +import os from 'node:os'; +import path from 'node:path'; +import { afterEach, describe, expect, it } from 'vitest'; + +import { + checkTestOnlyScope, + parseScopeCliArgs, + scopeDecision, +} from '../quality/scripts/checkTestOnlyScope.mjs'; + +const temporaryRepositories = []; + +afterEach(async () => { + await Promise.all(temporaryRepositories.splice(0).map((root) => rm(root, { recursive: true, force: true }))); +}); + +describe('bootstrap test-only scope policy', () => { + it('requires an explicit value for the optional head revision', () => { + expect(parseScopeCliArgs([])).toEqual({}); + expect(parseScopeCliArgs(['--head', 'abc123'])).toEqual({ headRevision: 'abc123' }); + expect(() => parseScopeCliArgs(['--head'])).toThrow('--head requires'); + expect(() => parseScopeCliArgs(['--base', 'abc123'])).toThrow('Unknown test-only scope argument'); + }); + + it.each([ + 'tests/unit/example.spec.js', + '.github/workflows/quest-pr.yml', + 'docs/testing.md', + 'package.json', + 'package-lock.json', + 'package-fixture.json', + 'playwright.config.js', + 'vite.config.js', + 'vitest.config.js', + '.node-version', + '.nvmrc', + '.gitignore', + 'README.md', + ])('allows reviewed test infrastructure at %s', (repositoryPath) => { + expect(scopeDecision(repositoryPath)).toEqual({ allowed: true }); + }); + + it.each([ + ['main.js', 'root production JavaScript'], + ['eventHandlers.js', 'root production JavaScript'], + ['ActiveLogic.css', 'root production CSS/HTML'], + ['index.html', 'root production CSS/HTML'], + ['i18n/en.js', 'production i18n source'], + ['assets/example.png', 'not in the bootstrap test-infrastructure allowlist'], + ['tests/../main.js', 'not a safe normalized repository-relative path'], + ])('rejects %s', (repositoryPath, expectedReason) => { + expect(scopeDecision(repositoryPath)).toEqual({ + allowed: false, + reason: expect.stringContaining(expectedReason), + }); + }); + + it('accepts an allowed descendant and reports a deterministic path inventory', async () => { + const repository = await createRepository(); + await write(repository.root, 'tests/unit/new.spec.js', 'export const covered = true;\n'); + await write(repository.root, 'docs/testing.md', '# Testing\n'); + const headSha = commit(repository.root, 'add test infrastructure'); + + expect(checkTestOnlyScope({ + repositoryRoot: repository.root, + baseRevision: repository.baseSha, + headRevision: headSha, + })).toEqual({ + baseSha: repository.baseSha, + headSha, + changedPaths: ['docs/testing.md', 'tests/unit/new.spec.js'], + }); + }); + + it('reports every production path changed by a descendant', async () => { + const repository = await createRepository(); + await write(repository.root, 'main.js', 'export const production = 2;\n'); + await write(repository.root, 'i18n/en.js', 'export default { next: "Continue" };\n'); + const headSha = commit(repository.root, 'change production'); + + expect(() => checkTestOnlyScope({ + repositoryRoot: repository.root, + baseRevision: repository.baseSha, + headRevision: headSha, + })).toThrowError([ + 'Bootstrap test-only scope gate failed.', + `Only reviewed test infrastructure may differ from ${repository.baseSha}.`, + '- i18n/en.js: production i18n source is outside this test-only pull request', + '- main.js: root production JavaScript is outside this test-only pull request', + ].join('\n')); + }); + + it('cannot hide a production deletion behind a rename into tests', async () => { + const repository = await createRepository(); + await mkdir(path.join(repository.root, 'tests'), { recursive: true }); + await rename(path.join(repository.root, 'main.js'), path.join(repository.root, 'tests', 'main.js')); + const headSha = commit(repository.root, 'move production into tests'); + + expect(() => checkTestOnlyScope({ + repositoryRoot: repository.root, + baseRevision: repository.baseSha, + headRevision: headSha, + })).toThrow(/main\.js: root production JavaScript/); + }); + + it('rejects an allowed-path commit when the pinned base is not its ancestor', async () => { + const repository = await createRepository(); + git(repository.root, 'switch', '--detach', repository.rootSha); + await write(repository.root, 'tests/unit/sibling.spec.js', 'export const sibling = true;\n'); + const siblingSha = commit(repository.root, 'create unrelated test branch'); + + expect(() => checkTestOnlyScope({ + repositoryRoot: repository.root, + baseRevision: repository.baseSha, + headRevision: siblingSha, + })).toThrow(`Bootstrap base ${repository.baseSha} is not an ancestor of head ${siblingSha}.`); + }); +}); + +async function createRepository() { + const root = await mkdtemp(path.join(os.tmpdir(), 'quest-test-only-scope-')); + temporaryRepositories.push(root); + git(root, 'init', '--quiet'); + git(root, 'config', 'user.email', 'quest-tests@example.invalid'); + git(root, 'config', 'user.name', 'Quest Tests'); + + await write(root, 'seed.txt', 'repository seed\n'); + const rootSha = commit(root, 'seed repository'); + await write(root, 'main.js', 'export const production = 1;\n'); + await write(root, 'ActiveLogic.css', '.question { display: block; }\n'); + await write(root, 'index.html', '
Quest
\n'); + await write(root, 'i18n/en.js', 'export default { next: "Next" };\n'); + const baseSha = commit(root, 'create production baseline'); + return { root, rootSha, baseSha }; +} + +async function write(repositoryRoot, relativePath, content) { + const filePath = path.join(repositoryRoot, relativePath); + await mkdir(path.dirname(filePath), { recursive: true }); + await writeFile(filePath, content, 'utf8'); +} + +function commit(repositoryRoot, message) { + git(repositoryRoot, 'add', '--all'); + git(repositoryRoot, 'commit', '--quiet', '--message', message); + return git(repositoryRoot, 'rev-parse', 'HEAD').trim(); +} + +function git(repositoryRoot, ...arguments_) { + return execFileSync('git', ['-C', repositoryRoot, ...arguments_], { + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'pipe'], + }); +} diff --git a/tests/unit/tree.spec.js b/tests/unit/tree.spec.js new file mode 100644 index 0000000..d187311 --- /dev/null +++ b/tests/unit/tree.spec.js @@ -0,0 +1,167 @@ +import { describe, expect, it, vi } from 'vitest'; +import { Tree } from '../../tree.js'; + +function buildBranchedTree() { + const tree = new Tree(); + tree.add(['Q1', 'Q2', 'Q3']); + tree.next(); + tree.add('Q1A'); + tree.next(); + tree.add('Q1B'); + tree.next(); + return tree; +} + +describe('Tree', () => { + it('starts empty at an iterable root node', () => { + const tree = new Tree(); + + expect(tree.isEmpty()).toBe(true); + expect(tree.currentNode).toBe(tree.rootNode); + expect(tree[Symbol.iterator]()).toBe(tree); + expect(tree.next()).toEqual({ done: true, value: undefined }); + expect(tree.previous()).toEqual({ done: true, value: undefined }); + expect(tree.isFirst()).toBe(false); + }); + + it('adds scalar and array children while filtering false array entries', () => { + const tree = new Tree(); + tree.add('Q1'); + tree.add(['Q2', null, '', 'Q3']); + + expect(tree.rootNode.children.map(({ value }) => value)).toEqual(['Q1', 'Q2', 'Q3']); + expect(tree.rootNode.children.every(({ parent }) => parent === tree.rootNode)).toBe(true); + }); + + it.each([null, undefined, '', false, 0])('rejects a false scalar value: %s', (value) => { + expect(() => new Tree().add(value)).toThrow('adding a falsy value to the tree.'); + }); + + it('rejects an array containing no usable values', () => { + expect(() => new Tree().add([null, '', false])).toThrow('cannot add an empty or falsy array to the tree'); + }); + + it('walks backward to the deepest previous sibling and clears abandoned descendants', () => { + const tree = buildBranchedTree(); + tree.next(); + expect(tree.currentNode.value).toBe('Q2'); + + const previous = tree.previous(); + expect(previous.value.value).toBe('Q1B'); + expect(tree.currentNode.children).toEqual([]); + + expect(tree.previous().value.value).toBe('Q1A'); + expect(tree.previous().value.value).toBe('Q1'); + expect(tree.isFirst()).toBe(true); + expect(tree.previous()).toEqual({ done: true, value: undefined }); + }); + + it('pops only leaf nodes and preserves nodes that still have children', () => { + const tree = new Tree(); + tree.add(['Q1', 'Q2']); + tree.next(); + tree.add('Q1A'); + + tree.pop(); + expect(tree.currentNode.value).toBe('Q1'); + expect(tree.currentNode.children.map(({ value }) => value)).toEqual(['Q1A']); + + tree.next(); + tree.pop(); + expect(tree.currentNode.value).toBe('Q1'); + expect(tree.currentNode.children).toEqual([]); + }); + + it('clears all navigation state', () => { + const tree = buildBranchedTree(); + tree.clear(); + + expect(tree.isEmpty()).toBe(true); + expect(tree.currentNode).toBe(tree.rootNode); + }); + + it('serializes, creates, and reloads the same tree shape and current node', () => { + const tree = buildBranchedTree(); + const json = tree.toJSON(); + const created = Tree.fromJSON(json); + + expect(created.toJSON()).toBe(json); + expect(created.currentNode.value).toBe('Q1B'); + + const existing = new Tree(); + existing.add('discard-me'); + existing.loadFromJSON(json); + expect(existing.toJSON()).toBe(json); + expect(existing.currentNode.value).toBe('Q1B'); + }); + + it('rejects malformed serialized input and invalid vanilla objects', () => { + expect(() => Tree.fromJSON('{not-json')).toThrow(); + expect(() => new Tree().loadFromVanillaObject({ currentNode: null, rootNode: {} })).toThrow(); + + const missingRootChildren = new Tree(); + missingRootChildren.rootNode.children = null; + expect(() => missingRootChildren.loadFromVanillaObject({ + currentNode: null, + rootNode: { children: [] }, + })).toThrow('children is null?'); + }); + + it('returns terminal results for nodes outside the tree without mutating it', () => { + const tree = new Tree(); + tree.add('Q1'); + const unknownNode = { value: 'UNKNOWN' }; + + expect(tree.rootNode.lookForNext(unknownNode)).toEqual({ done: true, value: undefined }); + expect(tree.rootNode.lookForPreviousNode(unknownNode)).toEqual({ done: true, value: undefined }); + + tree.rootNode.removeChild(unknownNode); + expect(tree.rootNode.children.map(({ value }) => value)).toEqual(['Q1']); + }); + + it('reports the end of a root sequence and a completed nested branch', () => { + const rootSequence = new Tree(); + rootSequence.add('Q1'); + expect(rootSequence.rootNode.lookForNext(rootSequence.rootNode.children[0])) + .toEqual({ done: true, value: undefined }); + + const nested = new Tree(); + nested.add('Q1'); + nested.next(); + nested.add('Q1A'); + nested.next(); + expect(nested.currentNode.next()).toEqual({ done: true, value: undefined }); + }); + + it('creates an independent empty tree through a node iterator helper', () => { + const tree = new Tree(); + tree.add('Q1'); + + const iterator = tree.rootNode.iterator(); + expect(iterator).toBeInstanceOf(Tree); + expect(iterator).not.toBe(tree); + expect(iterator.isEmpty()).toBe(true); + }); + + it('coerces a supplied lookahead node value without mutating that node', () => { + const nextNode = { value: 'Q1' }; + const receiver = { nextNode }; + + expect(Tree.prototype.hasNext.call(receiver)).toBe(true); + expect(nextNode).toEqual({ value: 'Q1' }); + + nextNode.value = null; + expect(Tree.prototype.hasNext.call(receiver)).toBe(false); + }); + + it('prints each traversable value and marks the current node', () => { + const log = vi.spyOn(console, 'log').mockImplementation(() => {}); + const tree = buildBranchedTree(); + + tree.printTree(); + + expect(log.mock.calls.flat().join(' ')).toContain('Q1B'); + expect(log.mock.calls.flat().join(' ')).toContain('<=== currentNode'); + }); + +}); diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..f093b0d --- /dev/null +++ b/vite.config.js @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite'; +import { questDependencyResolver } from './tests/config/moduleResolution.js'; + +export default defineConfig({ + plugins: [questDependencyResolver], + server: { + host: '127.0.0.1', + port: 4173, + strictPort: true, + }, + preview: { + host: '127.0.0.1', + port: 4173, + strictPort: true, + }, +}); diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 0000000..0623c56 --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,41 @@ +import { defineConfig } from 'vitest/config'; +import { questDependencyResolver } from './tests/config/moduleResolution.js'; + +export default defineConfig({ + plugins: [questDependencyResolver], + test: { + environment: 'jsdom', + environmentOptions: { + jsdom: { + // Match the non-local participant host used by Connect. Tests that + url: 'https://connect.test/', + }, + }, + setupFiles: ['./tests/setup/jsdom.js'], + include: ['./tests/{unit,integration,corpus}/**/*.spec.js'], + clearMocks: true, + restoreMocks: true, + mockReset: true, + testTimeout: 15_000, + hookTimeout: 15_000, + coverage: { + provider: 'v8', + reporter: ['text', 'json-summary', 'html', 'lcov'], + reportsDirectory: './coverage', + include: [ + '*.js', + 'i18n/*.js' + ], + exclude: [ + 'quest.js', + '*.config.js' + ], + thresholds: { + statements: 75, + branches: 65, + functions: 75, + lines: 75 + } + } + } +}); From c346b2801d55cb8829688a98ddacb9ecb63b9a6e Mon Sep 17 00:00:00 2001 From: Joe Armani <93854858+JoeArmani@users.noreply.github.com> Date: Thu, 6 Aug 2026 19:52:31 -0400 Subject: [PATCH 2/5] Copilot review updates --- .../integration/accessibilityBehavior.spec.js | 46 ++++++++++++------- .../integration/accessibilityBuilder.spec.js | 33 +++++++++---- tests/integration/eventHandlers.spec.js | 44 +++++++++++------- tests/integration/hostFailures.spec.js | 26 +++++++++-- tests/integration/responsePiping.spec.js | 22 +++++---- vitest.config.js | 2 +- 6 files changed, 118 insertions(+), 55 deletions(-) diff --git a/tests/integration/accessibilityBehavior.spec.js b/tests/integration/accessibilityBehavior.spec.js index c32d5be..cdaea81 100644 --- a/tests/integration/accessibilityBehavior.spec.js +++ b/tests/integration/accessibilityBehavior.spec.js @@ -1,4 +1,4 @@ -import { describe, expect, it, vi } from 'vitest'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { renderFreshQuest } from '../helpers/questRuntime.js'; const GRID_SURVEY = ` @@ -16,6 +16,12 @@ function treeAt(questionID) { } describe('screen-reader and keyboard behavior', () => { + beforeEach(() => vi.useFakeTimers()); + afterEach(() => { + vi.clearAllTimers(); + vi.useRealTimers(); + }); + it('uses native list controls while adding Windows-specific refocus and announcements', async () => { const quest = await renderFreshQuest(); quest.moduleParams.isWindowsEnvironment = true; @@ -24,10 +30,9 @@ describe('screen-reader and keyboard behavior', () => { radio.click(); radio.dispatchEvent(new Event('change', { bubbles: true, cancelable: true })); - await vi.waitFor(() => expect(document.activeElement).toBe(radio)); - await vi.waitFor(() => { - expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Selected.'); - }); + await vi.advanceTimersByTimeAsync(100); + expect(document.activeElement).toBe(radio); + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Selected.'); }); it('moves the Windows table focus helper to the next visible row after a radio selection', async () => { @@ -42,7 +47,8 @@ describe('screen-reader and keyboard behavior', () => { firstRowChoice.dispatchEvent(new Event('change', { bubbles: true, cancelable: true })); const helper = quest.root.querySelector('#srFocusHelper'); - await vi.waitFor(() => expect(document.activeElement).toBe(helper)); + await vi.advanceTimersByTimeAsync(100); + expect(document.activeElement).toBe(helper); expect(helper.closest('tr')?.dataset.questionId).toBe('ROW_TWO'); expect(helper.parentElement.tagName).toBe('TH'); }); @@ -59,7 +65,8 @@ describe('screen-reader and keyboard behavior', () => { finalRowChoice.dispatchEvent(new Event('change', { bubbles: true, cancelable: true })); const helper = quest.root.querySelector('#srFocusHelper'); - await vi.waitFor(() => expect(document.activeElement).toBe(helper)); + await vi.advanceTimersByTimeAsync(100); + expect(document.activeElement).toBe(helper); expect(helper.closest('button')).toBe(quest.root.querySelector('#GRID .next')); }); @@ -74,9 +81,8 @@ describe('screen-reader and keyboard behavior', () => { choice.click(); choice.dispatchEvent(new Event('change', { bubbles: true })); - await vi.waitFor(() => { - expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent.trim()).toBe('Often Selected.'); - }); + await vi.advanceTimersByTimeAsync(250); + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent.trim()).toBe('Often Selected.'); expect(choice.getAttribute('role')).toBeNull(); }); @@ -94,11 +100,13 @@ describe('screen-reader and keyboard behavior', () => { secondText.focus(); secondText.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'ArrowUp' })); - await vi.waitFor(() => expect(document.activeElement).toBe(fieldset.querySelector('#FIRST_RADIO'))); + await vi.advanceTimersByTimeAsync(0); + expect(document.activeElement).toBe(fieldset.querySelector('#FIRST_RADIO')); firstText.focus(); firstText.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: true, key: 'ArrowDown' })); - await vi.waitFor(() => expect(document.activeElement).not.toBe(firstText)); + await vi.advanceTimersByTimeAsync(0); + expect(document.activeElement).not.toBe(firstText); const radio = fieldset.querySelector('#SECOND_RADIO'); radio.focus(); @@ -110,15 +118,21 @@ describe('screen-reader and keyboard behavior', () => { it('reconstructs and restores question focus after closing the soft-response modal', async () => { const quest = await renderFreshQuest(); const modal = quest.root.querySelector('#softModal'); + const focusTarget = quest.root.querySelector('#Q1 .screen-reader-focus'); + + // The initial render already schedules a 500 ms focus. Remove it so a + // passing assertion proves the close handler's 100 ms + 500 ms chain. + vi.clearAllTimers(); + expect(document.activeElement).not.toBe(focusTarget); modal.style.display = 'block'; modal.dispatchEvent(new MouseEvent('click', { bubbles: true })); expect(modal.style.display).toBe('none'); - await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#Q1 .screen-reader-focus')), { - timeout: 1_000, - interval: 25, - }); + await vi.advanceTimersByTimeAsync(100); + expect(document.activeElement).not.toBe(focusTarget); + await vi.advanceTimersByTimeAsync(500); + expect(document.activeElement).toBe(focusTarget); expect(quest.root.querySelectorAll('#Q1 .screen-reader-focus')).toHaveLength(1); }); }); diff --git a/tests/integration/accessibilityBuilder.spec.js b/tests/integration/accessibilityBuilder.spec.js index bf3d783..43f8803 100644 --- a/tests/integration/accessibilityBuilder.spec.js +++ b/tests/integration/accessibilityBuilder.spec.js @@ -1,4 +1,4 @@ -import { describe, expect, it, vi } from 'vitest'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { renderFreshQuest } from '../helpers/questRuntime.js'; async function loadAccessibilityFixture(markup) { @@ -120,6 +120,12 @@ describe('accessible question text construction', () => { }); describe('accessible selection focus and defensive paths', () => { + beforeEach(() => vi.useFakeTimers()); + afterEach(() => { + vi.clearAllTimers(); + vi.useRealTimers(); + }); + it('keeps focus on a non-final table checkbox and announces its state', async () => { const { quest, accessibility } = await loadAccessibilityFixture(`
@@ -135,9 +141,11 @@ describe('accessible selection focus and defensive paths', () => { accessibility.handleRadioCheckboxTableEvents(event); expect(event.preventDefault).toHaveBeenCalledOnce(); - await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#srFocusHelper'))); + await vi.advanceTimersByTimeAsync(100); + expect(document.activeElement).toBe(quest.root.querySelector('#srFocusHelper')); expect(document.activeElement.closest('td')).toBe(input.closest('td')); - await vi.waitFor(() => expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toBe('First Selected.')); + await vi.advanceTimersByTimeAsync(150); + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toBe('First Selected.'); }); it('moves focus from the final table checkbox to the active question Next button', async () => { @@ -154,7 +162,8 @@ describe('accessible selection focus and defensive paths', () => { }); const helper = quest.root.querySelector('#srFocusHelper'); - await vi.waitFor(() => expect(document.activeElement).toBe(helper)); + await vi.advanceTimersByTimeAsync(100); + expect(document.activeElement).toBe(helper); expect(helper.closest('button')).toBe(quest.root.querySelector('button.next')); }); @@ -175,7 +184,8 @@ describe('accessible selection focus and defensive paths', () => { type: 'change', preventDefault: vi.fn(), }); - await vi.waitFor(() => expect(quest.errors.some(([message]) => message.includes('Next question cell not found'))).toBe(true)); + await vi.advanceTimersByTimeAsync(100); + expect(quest.errors.some(([message]) => message.includes('Next question cell not found'))).toBe(true); quest.root.querySelector('#srFocusHelper').remove(); accessibility.handleRadioCheckboxTableEvents({ @@ -183,7 +193,8 @@ describe('accessible selection focus and defensive paths', () => { type: 'change', preventDefault: vi.fn(), }); - await vi.waitFor(() => expect(quest.errors.some(([message]) => message.includes('Focus helper not found'))).toBe(true)); + await vi.advanceTimersByTimeAsync(100); + expect(quest.errors.some(([message]) => message.includes('Focus helper not found'))).toBe(true); }); it('logs missing active-question and Next-button targets for final selections', async () => { @@ -194,11 +205,13 @@ describe('accessible selection focus and defensive paths', () => { const event = { target: quest.root.querySelector('#ONLY'), type: 'change', preventDefault: vi.fn() }; accessibility.handleRadioCheckboxTableEvents(event); - await vi.waitFor(() => expect(quest.errors.some(([message]) => message === 'Active question not found')).toBe(true)); + await vi.advanceTimersByTimeAsync(100); + expect(quest.errors.some(([message]) => message === 'Active question not found')).toBe(true); quest.root.insertAdjacentHTML('afterbegin', '
'); accessibility.handleRadioCheckboxTableEvents(event); - await vi.waitFor(() => expect(quest.errors.some(([message]) => message === 'Next question button not found')).toBe(true)); + await vi.advanceTimersByTimeAsync(100); + expect(quest.errors.some(([message]) => message === 'Next question button not found')).toBe(true); }); it('walks past non-response siblings when ArrowUp leaves a nested text field', async () => { @@ -210,8 +223,8 @@ describe('accessible selection focus and defensive paths', () => { current.focus(); accessibility.handleUpDownArrowKeys({ key: 'ArrowUp', target: current, preventDefault: vi.fn() }); - - await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#PREVIOUS'))); + await vi.advanceTimersByTimeAsync(0); + expect(document.activeElement).toBe(quest.root.querySelector('#PREVIOUS')); }); it('returns safely when announcer dependencies are absent and clears an existing region', async () => { diff --git a/tests/integration/eventHandlers.spec.js b/tests/integration/eventHandlers.spec.js index 1ee5682..fd402e3 100644 --- a/tests/integration/eventHandlers.spec.js +++ b/tests/integration/eventHandlers.spec.js @@ -1,4 +1,4 @@ -import { describe, expect, it, vi } from 'vitest'; +import { afterEach, describe, expect, it, vi } from 'vitest'; import { renderFreshQuest } from '../helpers/questRuntime.js'; const TEXT_SURVEY = ` @@ -9,10 +9,17 @@ const TEXT_SURVEY = ` `; describe('delegated runtime event handling', () => { + afterEach(() => { + vi.clearAllTimers(); + vi.useRealTimers(); + }); + it('captures input, focusout, Enter, and reset behavior at the Quest container boundary', async () => { + vi.useFakeTimers(); const quest = await renderFreshQuest({ markdown: TEXT_SURVEY }); const input = quest.root.querySelector('#TEXT_VALUE'); const form = input.form; + vi.clearAllTimers(); const enter = new KeyboardEvent('keydown', { bubbles: true, @@ -26,7 +33,8 @@ describe('delegated runtime event handling', () => { input.value = 'debounced value'; input.dispatchEvent(new InputEvent('input', { bubbles: true, data: 'e', inputType: 'insertText' })); - await new Promise((resolve) => setTimeout(resolve, 300)); + expect(vi.getTimerCount()).toBe(1); + await vi.advanceTimersByTimeAsync(250); expect(quest.state.getActiveQuestionState()).toEqual({}); input.value = 'focusout value'; @@ -40,6 +48,7 @@ describe('delegated runtime event handling', () => { }); it('debounces nested Other text input and keeps its owning checkbox in sync', async () => { + vi.useFakeTimers(); const quest = await renderFreshQuest({ markdown: TEXT_SURVEY }); const form = quest.root.querySelector('#TEXT'); form.querySelector('fieldset').innerHTML = ` @@ -54,11 +63,13 @@ describe('delegated runtime event handling', () => { quest.state.setNumResponseInputs('TEXT', 2); const checkbox = form.querySelector('#OTHER'); const otherText = form.querySelector('#OTHER_TEXT'); + vi.clearAllTimers(); otherText.value = 'synthetic detail'; otherText.dispatchEvent(new InputEvent('input', { bubbles: true, data: 'l', inputType: 'insertText' })); + await vi.advanceTimersByTimeAsync(250); - await vi.waitFor(() => expect(checkbox.checked).toBe(true)); + expect(checkbox.checked).toBe(true); expect(quest.state.getActiveQuestionState().TEXT).toEqual({ OTHER_GROUP: ['99'], OTHER_TEXT: 'synthetic detail', @@ -66,7 +77,8 @@ describe('delegated runtime event handling', () => { otherText.value = ''; otherText.dispatchEvent(new InputEvent('input', { bubbles: true, data: null, inputType: 'deleteContentBackward' })); - await vi.waitFor(() => expect(checkbox.checked).toBe(false)); + await vi.advanceTimersByTimeAsync(250); + expect(checkbox.checked).toBe(false); }); it('formats SSN and telephone keystrokes through delegated keyup listeners', async () => { @@ -89,21 +101,19 @@ describe('delegated runtime event handling', () => { }); it('updates the live selection announcement without requiring listeners on individual controls', async () => { + vi.useFakeTimers(); const quest = await renderFreshQuest(); const radio = quest.root.querySelector('#Q1_2'); radio.click(); radio.dispatchEvent(new Event('change', { bubbles: true })); - - await vi.waitFor(() => { - expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Selected.'); - }); + await vi.advanceTimersByTimeAsync(100); + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Selected.'); radio.checked = false; radio.dispatchEvent(new Event('change', { bubbles: true })); - await vi.waitFor(() => { - expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Unselected.'); - }); + await vi.advanceTimersByTimeAsync(100); + expect(quest.root.querySelector('#ariaLiveSelectionAnnouncer').textContent).toContain('Second answer Unselected.'); }); it('builds a legend, a single hidden focus stop, and accessible break semantics', async () => { @@ -118,15 +128,17 @@ describe('delegated runtime event handling', () => { }); it('moves focus to the constructed screen-reader stop after a question transition', async () => { + vi.useFakeTimers(); const quest = await renderFreshQuest(); + vi.clearAllTimers(); + quest.root.querySelector('#Q1_1').click(); quest.root.querySelector('#Q1 .next').click(); + await vi.advanceTimersByTimeAsync(0); - await vi.waitFor(() => expect(quest.root.querySelector('form.active')?.id).toBe('Q2')); - await vi.waitFor(() => expect(document.activeElement).toBe(quest.root.querySelector('#Q2 .screen-reader-focus')), { - timeout: 1_500, - interval: 25, - }); + expect(quest.root.querySelector('form.active')?.id).toBe('Q2'); + await vi.advanceTimersByTimeAsync(500); + expect(document.activeElement).toBe(quest.root.querySelector('#Q2 .screen-reader-focus')); }); it('keeps host controls outside the delegated event boundary unchanged', async () => { diff --git a/tests/integration/hostFailures.spec.js b/tests/integration/hostFailures.spec.js index ddc7a39..dbe98f7 100644 --- a/tests/integration/hostFailures.spec.js +++ b/tests/integration/hostFailures.spec.js @@ -11,10 +11,28 @@ describe('host boundary success, delay, and failure behavior', () => { it('advances immediately while a delayed successful host write settles', async () => { const quest = await renderFreshQuest({ storeDelay: 150 }); - await answerAndAdvance(quest); - expect(quest.root.querySelector('form.active')?.id).toBe('Q2'); - await vi.waitFor(() => expect(quest.calls.store).toHaveLength(1)); - expect(quest.errors).toEqual([]); + vi.useFakeTimers(); + try { + quest.root.querySelector('#Q1_1').click(); + quest.root.querySelector('#Q1 .next').click(); + + expect(quest.root.querySelector('form.active')?.id).toBe('Q2'); + expect(quest.calls.store).toHaveLength(1); + const pendingWrite = quest.store.mock.results[0].value; + let settled = false; + pendingWrite.then(() => { + settled = true; + }); + await Promise.resolve(); + expect(settled).toBe(false); + + await vi.advanceTimersByTimeAsync(150); + await expect(pendingWrite).resolves.toEqual({ code: 200 }); + expect(settled).toBe(true); + expect(quest.errors).toEqual([]); + } finally { + vi.useRealTimers(); + } }); it.each(['non200', 'reject'])('rolls back navigation and shows a recoverable modal after a %s store result', async (storeMode) => { diff --git a/tests/integration/responsePiping.spec.js b/tests/integration/responsePiping.spec.js index 11650e1..cca3aa0 100644 --- a/tests/integration/responsePiping.spec.js +++ b/tests/integration/responsePiping.spec.js @@ -141,14 +141,20 @@ describe('response piping through participant runtime state', () => { const other = select.querySelector('#CHOICES_99'); const detail = select.querySelector('#OTHER_TEXT'); - alpha.click(); - other.click(); - detail.value = 'Participant detail'; - detail.dispatchEvent(new InputEvent('input', { bubbles: true, data: 'l', inputType: 'insertText' })); - await vi.waitFor(() => expect(quest.state.getActiveQuestionState().SELECT).toEqual({ - CHOICES: ['1', '99'], - OTHER_TEXT: 'Participant detail', - })); + vi.useFakeTimers(); + try { + alpha.click(); + other.click(); + detail.value = 'Participant detail'; + detail.dispatchEvent(new InputEvent('input', { bubbles: true, data: 'l', inputType: 'insertText' })); + await vi.advanceTimersByTimeAsync(250); + expect(quest.state.getActiveQuestionState().SELECT).toEqual({ + CHOICES: ['1', '99'], + OTHER_TEXT: 'Participant detail', + }); + } finally { + vi.useRealTimers(); + } await next(quest); expect((await activeQuestion(quest, 'SUMMARY')).textContent).toContain('Alpha; Other; Participant detail'); diff --git a/vitest.config.js b/vitest.config.js index 0623c56..1711f8d 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -7,7 +7,7 @@ export default defineConfig({ environment: 'jsdom', environmentOptions: { jsdom: { - // Match the non-local participant host used by Connect. Tests that + // Use a synthetic non-local origin to model Quest embedded in Connect. url: 'https://connect.test/', }, }, From dfd75ee93601b56aa284497b05d42e9a0adb579d Mon Sep 17 00:00:00 2001 From: Joe Armani <93854858+JoeArmani@users.noreply.github.com> Date: Thu, 6 Aug 2026 21:04:48 -0400 Subject: [PATCH 3/5] fix testing timeout error --- tests/corpus/responsePipingStructure.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/corpus/responsePipingStructure.spec.js b/tests/corpus/responsePipingStructure.spec.js index 9801402..58e2a03 100644 --- a/tests/corpus/responsePipingStructure.spec.js +++ b/tests/corpus/responsePipingStructure.spec.js @@ -240,7 +240,7 @@ describe.skipIf(unavailable.length > 0)('locked production response-piping struc `${entry.module}/${entry.locale}: every authored destination/source pair must survive in its own runtime form`, ).toEqual([]); } - }); + }, 180_000); it('keeps English and Spanish source/destination pairs aligned except for the two audited differences', () => { const pairsByModule = new Map(); From 2a24ee3cdb3dd7fc13564d30013f77c8ce6c81c6 Mon Sep 17 00:00:00 2001 From: Joe Armani <93854858+JoeArmani@users.noreply.github.com> Date: Thu, 6 Aug 2026 21:27:30 -0400 Subject: [PATCH 4/5] CI updates (passing locally, failing in GH CI) --- .github/workflows/quest-pr.yml | 5 +++++ tests/e2e/accessibility.spec.js | 1 + vite.config.js | 3 +++ 3 files changed, 9 insertions(+) diff --git a/.github/workflows/quest-pr.yml b/.github/workflows/quest-pr.yml index a7fd896..e74c3a3 100644 --- a/.github/workflows/quest-pr.yml +++ b/.github/workflows/quest-pr.yml @@ -113,6 +113,11 @@ jobs: node-version-file: .node-version cache: npm - run: npm ci + - uses: actions/cache@v4 + with: + path: .cache/questionnaire + key: questionnaire-${{ runner.os }}-${{ hashFiles('tests/corpus/lock.json') }} + - run: npm run corpus:fetch && npm run corpus:verify - run: npx playwright install --with-deps ${{ matrix.browser }} - name: Run canonical, axe, and representative authoring checks run: npx playwright test --project=${{ matrix.project }} --grep "@canonical|@axe|@cross-browser-authoring" --grep-invert @known-defect diff --git a/tests/e2e/accessibility.spec.js b/tests/e2e/accessibility.spec.js index af8a136..8e9b6df 100644 --- a/tests/e2e/accessibility.spec.js +++ b/tests/e2e/accessibility.spec.js @@ -124,6 +124,7 @@ test.describe('participant accessibility contract @canonical @windows-a11y', () return; } + await expect(question.locator('.screen-reader-focus')).toBeFocused(); const input = question.locator('#detail'); await input.focus(); await page.keyboard.press('Tab'); diff --git a/vite.config.js b/vite.config.js index f093b0d..a8c36bd 100644 --- a/vite.config.js +++ b/vite.config.js @@ -3,6 +3,9 @@ import { questDependencyResolver } from './tests/config/moduleResolution.js'; export default defineConfig({ plugins: [questDependencyResolver], + optimizeDeps: { + include: ['mathjs'], + }, server: { host: '127.0.0.1', port: 4173, From 222ca1940c8d79d63e090d3115c0786858a83f6e Mon Sep 17 00:00:00 2001 From: Joe Armani <93854858+JoeArmani@users.noreply.github.com> Date: Thu, 13 Aug 2026 14:26:03 -0400 Subject: [PATCH 5/5] Updates from code review --- tests/README.md | 1 + tests/corpus/README.md | 5 +++ tests/corpus/scripts/fetchCorpus.mjs | 33 +++++++-------- tests/knownDefects/registry.js | 6 ++- tests/unit/fetchCorpus.spec.js | 60 ++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+), 20 deletions(-) create mode 100644 tests/unit/fetchCorpus.spec.js diff --git a/tests/README.md b/tests/README.md index 4088817..ff6d8ae 100644 --- a/tests/README.md +++ b/tests/README.md @@ -11,6 +11,7 @@ existing `transform.render(...)` API. 3. Run `npx playwright install chromium firefox webkit`. 4. Run `npm run corpus:fetch` once. The command downloads the immutable questionnaire revision in `tests/corpus/lock.json` and verifies its hashes. + No GitHub token is required. ## Useful commands diff --git a/tests/corpus/README.md b/tests/corpus/README.md index 72c1632..402b8c6 100644 --- a/tests/corpus/README.md +++ b/tests/corpus/README.md @@ -12,6 +12,11 @@ npm run corpus:verify npm run corpus:catalog:verify ``` +Local and CI fetches use GitHub's public archive URL for the exact locked +commit. They do not read or require `GITHUB_TOKEN` or `GH_TOKEN`. After the +download, every selected file is checked against the SHA-256 and Git blob hash +recorded in `lock.json` before it is installed in the cache. + Verified files are stored under the ignored `.cache/questionnaire/` directory. Chromium opens every locked survey in fresh Connect-shaped pages twice: once as a participant startup smoke test and once in renderer/full-list diff --git a/tests/corpus/scripts/fetchCorpus.mjs b/tests/corpus/scripts/fetchCorpus.mjs index 56de066..bcdd50e 100644 --- a/tests/corpus/scripts/fetchCorpus.mjs +++ b/tests/corpus/scripts/fetchCorpus.mjs @@ -2,6 +2,7 @@ import { execFile } from 'node:child_process'; import { promisify } from 'node:util'; import { copyFile, mkdir, mkdtemp, readFile, rename, rm, writeFile } from 'node:fs/promises'; import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { corpusCacheDirectory, @@ -15,6 +16,7 @@ import { import { DEFAULT_LOCK_PATH, pathExists } from './lib/artifacts.mjs'; const execFileAsync = promisify(execFile); +const SCRIPT_PATH = fileURLToPath(import.meta.url); function parseArguments(argv) { const options = { @@ -33,26 +35,19 @@ function parseArguments(argv) { return options; } -function githubHeaders() { - const headers = { - Accept: 'application/vnd.github+json', - 'X-GitHub-Api-Version': '2022-11-28', - 'User-Agent': 'quest-corpus-fetcher', - }; - const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN; - if (token) headers.Authorization = `Bearer ${token}`; - return headers; +export function questionnaireArchiveUrl(lock) { + return `https://github.com/${lock.repository}/archive/${lock.commit}.tar.gz`; } -async function downloadArchive(lock, archivePath) { - const url = `https://api.github.com/repos/${lock.repository}/tarball/${lock.commit}`; - const response = await fetch(url, { - headers: githubHeaders(), +export async function downloadArchive(lock, archivePath, { fetchImpl = fetch } = {}) { + const url = questionnaireArchiveUrl(lock); + const response = await fetchImpl(url, { + headers: { 'User-Agent': 'quest-corpus-fetcher' }, redirect: 'follow', }); if (!response.ok) { - throw new Error(`Immutable GitHub archive fetch failed with HTTP ${response.status}.`); + throw new Error(`Public GitHub archive fetch failed with HTTP ${response.status}.`); } await writeFile(archivePath, Buffer.from(await response.arrayBuffer())); } @@ -138,7 +133,9 @@ async function main() { } } -main().catch((error) => { - console.error(error.cause?.message ?? error.message); - process.exitCode = 1; -}); +if (process.argv[1] && path.resolve(process.argv[1]) === SCRIPT_PATH) { + main().catch((error) => { + console.error(error.cause?.message ?? error.message); + process.exitCode = 1; + }); +} diff --git a/tests/knownDefects/registry.js b/tests/knownDefects/registry.js index 4540168..eb4120a 100644 --- a/tests/knownDefects/registry.js +++ b/tests/knownDefects/registry.js @@ -14,8 +14,10 @@ function defect(localDefectId, target, reason, extra = {}) { /** * Existing Quest behavior characterized before production changes resume. - * These records are intentionally test-only. Expiry is checked in the - * non-blocking known-defect lane so accepted failures cannot become permanent. + * Behavioral reproductions run in the non-blocking known-defect lane. Registry + * metadata and expiry are checked in the blocking quality lane so accepted + * failures must be fixed, removed, or renewed before they become + * permanent. */ export const runtimeDefects = Object.freeze({ treeDepthFirst: defect('QD-TREE-001', 'Tree.next depth-first traversal across root siblings', 'Traversal stops after the first root branch instead of continuing to later siblings.'), diff --git a/tests/unit/fetchCorpus.spec.js b/tests/unit/fetchCorpus.spec.js new file mode 100644 index 0000000..589ab89 --- /dev/null +++ b/tests/unit/fetchCorpus.spec.js @@ -0,0 +1,60 @@ +import { mkdtemp, readFile, rm } from 'node:fs/promises'; +import os from 'node:os'; +import path from 'node:path'; + +import { afterEach, describe, expect, it, vi } from 'vitest'; + +import { + downloadArchive, + questionnaireArchiveUrl, +} from '../corpus/scripts/fetchCorpus.mjs'; + +const temporaryDirectories = []; +const lock = { + repository: 'episphere/questionnaire', + commit: '7ae99a22af325cf0e14be047a7636462db9bfd50', +}; + +afterEach(async () => { + vi.unstubAllEnvs(); + await Promise.all(temporaryDirectories.splice(0).map((directory) => ( + rm(directory, { recursive: true, force: true }) + ))); +}); + +describe('questionnaire corpus download', () => { + it('uses the public archive URL for the exact locked commit', () => { + expect(questionnaireArchiveUrl(lock)).toBe( + 'https://github.com/episphere/questionnaire/archive/7ae99a22af325cf0e14be047a7636462db9bfd50.tar.gz', + ); + }); + + it('does not send credentials even when token-named variables exist', async () => { + vi.stubEnv('GITHUB_TOKEN', 'must-not-be-sent'); + vi.stubEnv('GH_TOKEN', 'must-not-be-sent-either'); + const directory = await mkdtemp(path.join(os.tmpdir(), 'quest-corpus-download-test-')); + temporaryDirectories.push(directory); + const archivePath = path.join(directory, 'questionnaire.tar.gz'); + const archiveBytes = new Uint8Array([31, 139, 8, 0]); + const fetchImpl = vi.fn(async () => ({ + ok: true, + status: 200, + arrayBuffer: async () => archiveBytes.buffer, + })); + + await downloadArchive(lock, archivePath, { fetchImpl }); + + expect(fetchImpl).toHaveBeenCalledWith(questionnaireArchiveUrl(lock), { + headers: { 'User-Agent': 'quest-corpus-fetcher' }, + redirect: 'follow', + }); + await expect(readFile(archivePath)).resolves.toEqual(Buffer.from(archiveBytes)); + }); + + it('reports the HTTP status for an unsuccessful public download', async () => { + const fetchImpl = vi.fn(async () => ({ ok: false, status: 503 })); + + await expect(downloadArchive(lock, '/unused/archive.tar.gz', { fetchImpl })) + .rejects.toThrow('Public GitHub archive fetch failed with HTTP 503.'); + }); +});